最初,我的日期正则表达式的工作方式如下,例如捕获“ 2018年2月12日”
match = re.search(r'(January|February|March|April|May|June|July|August|September?|October?|November|December)\s+\d{1,2},\s+\d{4}', date).group()
但是我希望它变得更加灵活,并将变量字符串输入到我的正则表达式中,但是在浏览了许多关于类似问题的stackoverflow线程后,我似乎无法使其工作。我是个新手,所以我不知道出了什么问题。我知道MONTHS根本行不通。谢谢
MONTHS = "January|February|March|April|May|June|July|August|September|October|November|December"
match = re.search(r'(MONTHS)\s+\d{1,2},\s+\d{4}', date).group()
print(match)
'NoneType' object has no attribute 'group'
答案 0 :(得分:1)
您已经将MONTHS作为匹配字符串的一部分,python不知道它应该引用存储另一个字符串的变量。
因此,请尝试:
match = re.search(r'(' + MONTHS + ')\s+\d{1,2},\s+\d{4}', date).group()
这将连接(粘在一起)三个字符串,第一个字符串,然后是存储在MONTHS变量中的字符串,然后是最后一个字符串。
答案 1 :(得分:0)
如果要将某些内容替换为字符串,则需要使用格式字符串(无论是f字符串文字还是字符串对象上的format
或format_map
方法)或printf样式格式(或模板字符串,或第三方库…,但通常是前两个库之一)。
通常,格式字符串是最简单的解决方案,但对于需要用括号括起来的字符串来说,它们不能很好地发挥作用。您不希望将{4}
视为“填写第四个参数”,而将其转义为{{4}}
会使可读性降低(并且在处理正则表达式时,它们会已经不够可读...)。
因此,在这里printf样式格式可能是一个更好的选择:
pattern = r'(%s)\s+\d{1,2},\s+\d{4}' % (MONTHS,)
…或:
pattern = r'(%(MONTHS)s)\s+\d{1,2},\s+\d{4}' % {'MONTHS': MONTHS}