Python中正则表达式内部的变量';s series.str.contains框架
我想在运行正则表达式之前控制/编辑正则表达式的元素作为变量。 在我正在使用的正则表达式中,我希望在一个包含2个字(最多3个字)的数据帧中查找行 此代码使用不带外部变量的正则表达式标识word1和word2:Python中正则表达式内部的变量';s series.str.contains框架,python,regex,string,dataframe,contains,Python,Regex,String,Dataframe,Contains,我想在运行正则表达式之前控制/编辑正则表达式的元素作为变量。 在我正在使用的正则表达式中,我希望在一个包含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.
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
下面是我在正则表达式之外定义变量的失败尝试,根据stackoverflow上类似问题的答案进行调整:
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和var3?您可以将原始字符串与
f-strings
()组合在一起,但首先必须避开正则表达式量词上的大括号
字符串中花括号外的部分按字面处理,除了任何双花括号“{{”或“}}}”被相应的单花括号替换。一个开头的花括号“{”标记一个替换字段,该字段以Python表达式开头
rf“\b(?:{Var1}\W+(?:\W+\W+{0,{Var3}}}}{Var2}\W+(?:\W+\W+{0,{Var3}}}}{Var1})\b”
工作正常。谢谢!