如何在python中将变量字符串输入re.search [重复]
Posted
技术标签:
【中文标题】如何在python中将变量字符串输入re.search [重复]【英文标题】:How to input a variable string into re.search in python [duplicate] 【发布时间】:2019-01-20 13:37:00 【问题描述】:最初我的日期正则表达式如下工作,例如捕获“2018 年 2 月 12 日”
match = re.search(r'(January|February|March|April|May|June|July|August|September?|October?|November|December)\s+\d1,2,\s+\d4', date).group()
但我希望它变得更加灵活,并将我的变量字符串输入到我的正则表达式中,但在查看了许多关于类似问题的 *** 线程后,我似乎无法让它工作。我是一个新手,所以我不确定出了什么问题。我知道仅仅 MONTHS 是行不通的。谢谢
MONTHS = "January|February|March|April|May|June|July|August|September|October|November|December"
match = re.search(r'(MONTHS)\s+\d1,2,\s+\d4', date).group()
print(match)
'NoneType' object has no attribute 'group'
【问题讨论】:
附带说明为什么是“?”九月和十月? 哎呀,当我有 Sep(tember)?、Oct(ober)? 等时,我的旧字符串来自我的旧字符串。 【参考方案1】:您将 MONTHS 作为匹配字符串的一部分,python 不知道它应该引用存储另一个字符串的变量。
因此,请尝试:
match = re.search(r'(' + MONTHS + ')\s+\d1,2,\s+\d4', date).group()
这将连接(粘在一起)三个字符串,第一位,然后是存储在 MONTHS 变量中的字符串,然后是最后一位。
【讨论】:
现在可以了,非常感谢!【参考方案2】:如果您想将某些内容替换为字符串,您需要使用格式字符串(无论是 f 字符串文字还是字符串对象上的 format
或 format_map
方法)或 printf 样式格式(或模板字符串,或第三方库......但通常是前两个之一)。
通常,格式化字符串是最简单的解决方案,但它们不适用于需要大括号用于其他目的的字符串。您不希望 4
被视为“填写第四个参数”,并将其转义为 4
会降低可读性(当您处理正则表达式时,它们已经不够可读了...... )。
因此,此处使用 printf 样式格式可能是更好的选择:
pattern = r'(%s)\s+\d1,2,\s+\d4' % (MONTHS,)
… 或:
pattern = r'(%(MONTHS)s)\s+\d1,2,\s+\d4' % 'MONTHS': MONTHS
【讨论】:
以上是关于如何在python中将变量字符串输入re.search [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中将变量转换为 denary? [复制]