2012-08-15 56 views
3

我甲肝一个字符串,它可以包含以下内容:Python的正则表达式:匹配一个名为组或另一个

lots of text Nov 30 2011 lots more of text 

lots of text Nov 30 12:48 lots more of text 

我想匹配的是线内的日期。我想是第一行:

{'date': 'Nov 30 2011', 'time': None} 

或下联:

{'date': None, 'time': 'Nov 30 12:48'} 

所以我学尝试是这样的:

re.match(
    '^.+((?P<date>\w{3} \d{1,2} \d{4})|(?P<time>\w{3} \d{1,2}:\d{2})).+', 
    line 
) 

但这不工作,它返回None。我尝试了其他一些组合,但都没有工作。

我该怎么做?

回答

2

你缺少了一天就<time>组(如“十一月12:48”):

(?P<date>\w{3} \d{1,2} \d{4})|(?P<time>\w{3} \d{1,2} \d{1,2}:\d{2}) 

此外,你也许可以符合该模式没有^.+(...).+ - 它不添加远远超出了你的约会前后的性格。 我还建议用\s++(空格加上,或[ ]+,如果你想让它可见)替换空格 - 在某些地方你有两个空格,这不是太强大。

另一种选择是,以避免重复 - 维持日期在其自己的组,以及时间和一年之间增加alternaton:

(?P<date>\w{3}\s+\d{1,2})\s+(?:(?P<year>\d{4})|(?P<time>\d{1,2}:\d{2})) 

工作例如:http://rubular.com/r/g81Kudu0dY(无姓名)

相关问题