如何在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 字符串文字还是字符串对象上的 formatformat_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? [复制]

如何在python中将垂直字符串更改为水平字符串?

如何在python中将变量转换为字符串

如何在 python 中将字符串转换为有效的变量名?

如何在 Notepad++ 的 Python 脚本中将变量设置为正则表达式字符串?

如何在 Python 中将大量变量传入和传出函数?