Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中正则表达式内部的变量';s series.str.contains框架_Python_Regex_String_Dataframe_Contains - Fatal编程技术网

Python中正则表达式内部的变量';s series.str.contains框架

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.

我想在运行正则表达式之前控制/编辑正则表达式的元素作为变量。 在我正在使用的正则表达式中,我希望在一个包含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

下面是我在正则表达式之外定义变量的失败尝试,根据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”

工作正常。谢谢!