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

Posted

技术标签:

【中文标题】Python series.str.contains 框架中正则表达式中的变量【英文标题】:Variable inside regular expression in Python's series.str.contains framework 【发布时间】:2021-01-29 21:43:20 【问题描述】:

我想在运行正则表达式之前将正则表达式的元素作为变量进行控制/编辑。 在我使用的正则表达式中,我想在包含 2 个单词的数据框中查找行,其中最多 3 个单词分隔。

此代码使用不带外部变量的正则表达式识别 word1 和 word2:

import re
import pandas as pd

df = pd.DataFrame('a': ['some text here', 'some text there', 'word1 some more text word2'])
result = df['a'].str.contains(r"\b(?:word1\W+(?:\w+\W+)0,3?word2|word2\W+(?:\w+\W+)0,3?word1)\b") 

print(result)
0    False
1    False
2    True
Name: a, dtype: bool

我想要的是达到相同的结果,但能够在正则表达式之外控制 word1、word2 和值 3。

这是我在正则表达式之外定义变量的失败尝试,改编自 *** 上类似问题的答案:

import re
import pandas as pd

Var1 = "word1"
Var2 = "word2"
Var3 = "3"


df = pd.DataFrame('a': ['some text here', 'some text there', 'word1 some more text word2'])
result = df['a'].str.contains(r"\b(?:Var1\W+(?:\w+\W+)0,Var3?Var2|Var2\W+(?:\w+\W+)0,Var3?Var1)\b") 
   
print(result)
0    False
1    False
2    False
Name: a, dtype: bool

同样,这个也失败了:

result = df['a'].str.contains(r"\b(?:"+Var1+"\W+(?:\w+\W+)0,"+Var3+"?"+Var2+"|"+Var2+"\W+(?:\w+\W+)0,"+Var3+"?"+Var1+")\b")    

有没有一种简单的方法来调整正则表达式以读取 Var1 2 和 3?

【问题讨论】:

【参考方案1】:

您可以将原始字符串与f-strings (New in version 3.6) 组合,但首先您必须转义正则表达式量词上的花括号。

大括号外的字符串部分按字面意思处理,除了任何双大括号“”或“”被相应的单大括号替换。一个左大括号 '' 标记一个替换字段,它以 Python 表达式开头...

rf"\b(?:Var1\W+(?:\w+\W+)0,Var3?Var2|Var2\W+(?:\w+\W+)0,Var3?Var1)\b"

【讨论】:

完美运行。谢谢!

以上是关于Python series.str.contains 框架中正则表达式中的变量的主要内容,如果未能解决你的问题,请参考以下文章

Python代写,Python作业代写,代写Python,代做Python

Python开发

Python,python,python

Python 介绍

Python学习之认识python

python初识