我尝试组合几个正则表达式来匹配日期。你知道吗
例如,我有
regex1:(内部有3个组,分别是'month'、'day'、'year')
(?:(?P<month>\d{1,2})[/-](?P<day>\d{1,2})[/-](?P<year>\d{2,4}))
regex2:(内部还有3个组)
(?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')
但它返回的错误如下:
redefinition of group name 'month' as group 4; was group 1 at position 59
我猜同名组只能出现一次?你知道吗
那么,如何将所有这些正则表达式与命名组组合成一个正则表达式呢?你知道吗
解决这个问题的关键是使用一个branch reset group,它以
(?|
开头,本身就是一个非捕获组。你知道吗括号内的每个备选方案对其捕获组使用相同的数字。这也适用于命名捕获组,只要具有相同名称的组具有相同的索引,或者两者都是非命名组。你知道吗
但是,要使用此PCRE功能,必须使用Python的替代regex引擎:
附言:我没有检查你的模式太多,但正如其他人暗示有改进的空间。但这是另一个问题。你知道吗
相关问题 更多 >
编程相关推荐