合并多个正则表达式以进行日期识别

时间:2014-02-07 21:51:21

标签: python regex

我正在编写一个python 2.7.6程序,它在输入文件中查找日期的所有实例,即(如果文件包含“2014年4月9日”,“星期二”,“02/14/1980”“圣诞节”,它将会在文件中找到所有这些)。由于日期可以用许多不同的方式表示,因此我对不同类型的日期使用单独的正则表达式。我想将所有单独的正则表达式合并为一个大的正则表达式,以便按照它们在文件中出现的顺序查找日期的每个“类型”。

我有以下代码来测试日期,例如“2014年4月9日”

matches = re.findall("(?:((?:jan(?:(?:.)?|(?:uary)?)|feb(?:(?:.)?|(?:ruary)?)|mar(?:(?:.)?|(?:ch)?)|apr(?:(?:.)?|(?:il)?)|may|jun(?:(?:.)?|(?:e)?)|jul(?:(?:.)?|(?:y)?)|aug(?:(?:.)?|(?:gust)?)|sep(?:(?:.)?|(?:ept(?:(?:.)?))?|(?:tember)?)|oct(?:(?:.)?|(?:ober)?)|nov(?:(?:.)?|(?:ember)?)|dec(?:(?:.)?|(?:ember)?)) (?:[123][0-9]|[1-9])[ \t\r\f\v]?(?:rd|st|th)?(?:,)?[ \t\r\f\v]?(?:[0-2][0-9][0-9][0-9])?)|(?:(?:[0]?[1-9])|(?:[1][0-2]))[-/](?:(?:[012]?[0-9])|(?:[3][01]))[/-][12][0-9][0-9][0-9])",fileText,re.IGNORECASE)
print matches

在下一行,我匹配类似02/14 // 1980的日期,就像这样

matches = re.findall("(?:(?:[0]?[1-9])|(?:[1][0-2]))[-/](?:(?:[012]?[0-9])|(?:[3][01]))[/-][12][0-9][0-9][0-9]",fileText, re.IGNORECASE)
print matches

我想将它们合并为一个正则表达式。我试着做了

matches = re.findall("(?:first regular expression|second regular expression)", textFile, re.IGNORECASE)
print matches

但这只打印了所有日期,如“2014年4月9日”(这是第一个正则表达式)和''所有日期看起来像“02/14/1980”(这是第二个常规表达

任何帮助都会非常感激,帮助我弄清楚如何将2个正则表达式变为1。

1 个答案:

答案 0 :(得分:1)

如何只针对每个正则表达式检查每个输入行?

for line in input_file:
    regex1 = re.findall(pattern,line)
    regex2 = re.findall(pattern,line)
    if len(regex1) > 0:
        for item in regex1:
            print(item)
    if len(regex2) > 0:
        for item in regex2:
            print(item)