这是我目前的代码:
exp1 = re.compile('((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4})')
但我想要实现的是这样的:
regMonth = '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)'
exp1 = re.compile(r'(regMonth'+ r'\s?\d{4})')
我该如何解决这个问题?
答案 0 :(得分:1)
你可以尝试:
regMonth = 'Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec'
pattern = r'(?i)(?:' + regMonth + r')\s?\d{4}'
像这样:
regMonth = 'Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec'
string_1 = 'Jan 1947, dec 3456'
pattern = r'(?i)(?:' + regMonth + r')\s?\d{4}'
y = re.findall(pattern, string_1)
如果您在这种情况下打印y
,则会获得:
['Jan 1947', 'dec 3456']
这是匹配日期的数组。 string_1
是输入字符串,其中包含所需格式的日期。
首先,您可以将pattern
解释为:
pattern = r'(?i)(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s?\d{4}'
其中:
(?i) - Indicates that the regex is case-insensitive (If you want the user to enter the Month with the first letter being in caps, then remove this)
(?: - Is a non-capturing group containing the month (followed by 'regMonth')
注意 - 您还必须将第二个字符串')\s?\d{4}'
作为原始字符串,否则整个事情就会搞砸了。
此外,非捕获组非常重要,否则正则表达式将匹配Jan
,“2月”,...,Nov
或Dec\s?\d{4}
。
因此,Dec\s?\d{4}
成为一个完全独立的选项,这是不可取的。