查找逗号空间年份但忽略没有空格的逗号年份

时间:2011-04-21 23:05:50

标签: python regex

我正在尝试读取文件,并且每次找到, 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())

3 个答案:

答案 0 :(得分:1)

  1. 如果您要在文件中搜索正则表达式而不是匹配整个文件内容,请从正则表达式中删除^$

  2. 如果您希望每个文件有多个匹配项,请使用finditerfindall代替search

  3. 在指定正则表达式时使用原始字符串:p=re.compile(r',\s(19|20)\d\d')

  4. 示例:

    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,我认为它应该可行。这将使其匹配零个或多个空白字符,而不是恰好一个。如果您只想匹配零或一,请添加+