regex - 如何改进我的 Python 正则表达式语法?

标签 regex python

我对 Python 很陌生,对正则表达式也很陌生。 (我没有 Perl 经验。)

我能够以有效的方式使用正则表达式,但我不确定我的代码是否特别符合 Pythonic 或 consise。

例如,如果我想读入一个文本文件并打印出每行中直接出现在单词“foo”和“bar”之间的文本(假设这在一行中发生了一次或零次)我会写以下:

fileList = open(inFile, 'r')
pattern = re.compile(r'(foo)(.*)(bar)')
for line in fileList:
    result = pattern.search(line)
    if (result != None):
        print result.groups()[1]

有没有更好的方法? if 是避免在 None 上调用 groups() 所必需的。但我怀疑有一种更简洁的方法可以在有匹配字符串时获取匹配字符串,而不会在没有匹配字符串时抛出错误。

我不希望出现类似 Perl 的不可读性。我只想用最普通、最简单的方式完成这个普通的任务。

最佳答案

我觉得还可以

一些小问题:-

  • 你可以替换result.groups()[x]result.group(x+1) .
  • 如果不需要捕获foobar , 只需使用 r'foo(.*)bar' .
  • 如果您使用的是 Python 2.5+,请尝试使用 the with statement因此即使出现异常,文件也可以正常关闭。

顺便说一句,作为 5 线(不是我推荐的):

import re
pattern = re.compile(r'foo(.*)bar')
with open(inFile, 'r') as fileList:
  searchResults = (pattern.search(line) for line in fileList)
  groups = (result.group(1) for result in searchResults if result is not None)
  print '\n'.join(groups)

关于regex - 如何改进我的 Python 正则表达式语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2536684/

相关文章:

regex - 查找子程序的最后一个 "}"

c# - 修剪最后一次正则表达式匹配之前的所有文本

java - 如何将模式文本替换为包含基本文本元素的其他文本

php - 创建正则表达式

Python在创建venv时设置环境变量

Python 用相同的字符串填充列表

python - 创建一个 "snake"计数器

python - 调用 `pip install` 时运行自定义任务

python - 如何获取图像内矩形内的像素值

java - 正则表达式 find() 不正确;检测字符串中的重复字符