我可以在 Python 的正则表达式中使用变量而不是常量吗?

Posted

技术标签:

【中文标题】我可以在 Python 的正则表达式中使用变量而不是常量吗?【英文标题】:Can I use a variable instead of a constant in a regular expression in Python [duplicate] 【发布时间】:2021-05-19 07:49:01 【问题描述】:

是否可以在正则表达式中使用变量,如下所示?


target = ["New York", "the most"]
regex = r"((?:\w+\W+)3)(?=New York((?:\W+\w+)3))"

test_str = "The City of New York often called New York City or simply New York is the most populous city in the " \
           "United States. With an estimated 2016 population of 8537673 distributed over a land area of about 3026" \
           "square miles (784 km2) New York City is also the most densely populated major city in the United States."

matches = re.finditer(regex, test_str)

for match in matches:
    print(re.sub(r'\W+', ' ', match.group(1))+"  <------>" +re.sub(r'\W+', ' ', match.group(2)))
re.sub(r'\W+', '', match.group(1))

理想情况下,我希望它遍历上面“目标”列表中的每个元素并提取短语的左右三个单词,这段代码会这样做,但前提是搜索词是正则表达式中的常量.

提前致谢

【问题讨论】:

【参考方案1】:

您可以使用 f 字符串:

for phrase in target:
  regex = rf"((?:\w+\W+)3)(?=phrase((?:\W+\w+)3))"

【讨论】:

你必须转义正则表达式量词***.com/a/64403025/13144143上的花括号 @n1colas.m 喜欢吗? 是的。否则替换将只是 3 ...\W+)3)(?... 代码编译但不产生任何输出。

以上是关于我可以在 Python 的正则表达式中使用变量而不是常量吗?的主要内容,如果未能解决你的问题,请参考以下文章

仅使用字符串函数而不使用正则表达式从字符串创建字符列表

在Python的正则表达式中使用变量[重复]

如何在 python 中使用变量作为正则表达式? [复制]

Python series.str.contains 框架中正则表达式中的变量

使用 Python 正则表达式在两个变量之间查找 HTML

正则表达式搜索 - 在测试人员中工作,而不是在Spyder中[重复]