我对 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)
. - 如果不需要捕获
foo
和bar
, 只需使用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/