我正在尝试读取文件,并且每次找到, year
时都会将其打印出来。例如,如果它找到, 2003
,它会打印出来,但如果它找到,2003
,它将忽略它。我最初使用了分割,并且能够让这一年匹配,但是当我添加,
时,我意识到它看起来像两个不同的单词所以我不认为这会起作用。
这是我的代码:
import string
import re
while True:
filename=raw_input('Enter a file name: ')
if filename == 'exit':
break
try:
file = open(filename, 'r')
text=file.read()
file.close()
except:
print('file does not exist')
else:
p=re.compile('^\,\s(19|20)\d\d$')//this is my regular expression
print(text)
m=p.search(text)
if m:
print(m.groups())
答案 0 :(得分:1)
如果您要在文件中搜索正则表达式而不是匹配整个文件内容,请从正则表达式中删除^
和$
。
如果您希望每个文件有多个匹配项,请使用finditer
或findall
代替search
。
在指定正则表达式时使用原始字符串:p=re.compile(r',\s(19|20)\d\d')
示例:
for m in re.finditer(r',\s((19|20)\d\d)', text):
print m.group(1)
答案 1 :(得分:1)
>>> import re
>>> text = "foo bar, 2003, 2006,1923, derp"
>>> p = re.compile(r',\s((?:19|20)\d\d)')
>>> p.findall(text)
['2003', '2006']
简化示例。首先,删除锚点(^
和$
)并使用findall
代替search
来查找所有匹配项。我还使用?:
来指定一个不匹配的组(它不会显示在结果中),而是将年份改为组。
答案 2 :(得分:0)
如果您只是在正则表达式的*
中添加\s
,我认为它应该可行。这将使其匹配零个或多个空白字符,而不是恰好一个。如果您只想匹配零或一,请添加+
。