我尝试将几个正则表达式组合起来以匹配日期。
例如,我有
regex1 :(里面有3组,分别是'月','天','年')
is/my/path/to/file.jpg
regex2 :(里面还有3组)
(?:(?P<month>\d{1,2})[/-](?P<day>\d{1,2})[/-](?P<year>\d{2,4}))
还有很多其他的正则表达式。
我已逐一测试过它们。现在我想将它们组合成一个正则表达式,它们之间有很多“(?P<day>\d{1,2}) (?P<month>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z.]*[,.]? (?P<year>\d{4})
”。
我试过了:
|
但它返回错误,如:
import re
regexes = re.compile('regex1 here |'
'regex2 here |'
'regex3 here')
我的猜测是,具有相同名称的组只能出现一次?
那么,如何将所有这些正则表达式与命名组合并为一个?
答案 0 :(得分:1)
解决此问题的关键是使用以(?|
开头的branch reset group,它本身就是一个非捕获组。
括号内的每个替代项对其捕获组使用相同的数字。只要具有相同名称的组具有相同的索引 - 或者两者都是非命名组,这也适用于命名捕获组。
但是,要使用此PCRE功能,您必须使用Python的替代regex引擎:
import regex as re
regex = r"(?|(?:(?P<month>\d{1,2})[\/-](?P<day>\d{1,2})[\/-](?P<year>\d{2,4}))|(?P<day>\d{1,2}) (?P<month>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z.]*[,.]? (?P<year>\d{4}))"
PS:我没有多多检查你的模式,但正如其他人暗示的那样,还有改进的余地。但这是另一个问题。