Python 将变量传递给正则表达式extact
我试图使用另一列的值作为变量,使用Pandas进行正则表达式提取Python 将变量传递给正则表达式extact,python,regex,pandas,Python,Regex,Pandas,我试图使用另一列的值作为变量,使用Pandas进行正则表达式提取 df=pd.DataFrame({'text':[“决赛是有史以来最著名的斯诺克比赛之一,pa”,“戴维斯在四分之一决赛中第一次落后,因为他扮演了特里·格里菲斯。”],'key':[“斯诺克”,“四分之一决赛]) 我正在考虑构建一个字符串作为参数,然后像这样将其传递给函数 reg='(((?:\S+\S+{0,10}\b'+'snooker'+'\b\S*(?:\S+\b\S*){0,10}) df['text'].str.ext
df=pd.DataFrame({'text':[“决赛是有史以来最著名的斯诺克比赛之一,pa”,“戴维斯在四分之一决赛中第一次落后,因为他扮演了特里·格里菲斯。”],'key':[“斯诺克”,“四分之一决赛])
我正在考虑构建一个字符串作为参数,然后像这样将其传递给函数
reg='(((?:\S+\S+{0,10}\b'+'snooker'+'\b\S*(?:\S+\b\S*){0,10})
df['text'].str.extract(r'reg')
但它产生了这个错误
ValueError:模式不包含捕获组
我假设这是由于
“(r'reg')”
的语法造成的,这里有几个问题:
- 单词边界是用文字
(r“\b”)设置的,而不是用退格字符(\b
)设置的“\b”
- 不能将变量放入常规的普通字符串文字中,需要使用
或f-stringsformat()
- 模式中还需要一个捕获组
df['result']=df['text'].str.extract(fr'(((?:\S+\S+{{0,10}}}\b{keyword_var}\b(?:\S+\S+{0,10}))
注:
-使用变量插值支持定义原始f字符串文字,并将反斜杠解析为文字字符fr'…'
-一个包含单个捕获组的模式,该组值将作为返回值(((?:\S+\S+{{0,10}}\b{keyword\u var}\b(?:\S+\S+{0,10})
- 如果您的
不是纯字母数字字符串,则需要重新考虑并转义内容,例如关键字
{re.escape(keyword_var)}
\b
设置的,而不是用backspace字符;2)不能将变量放入不是f字符串的字符串literal中,但3)需要做什么?不,我需要参数(r'something')
试试df['text'].str.extract(fr'((?:\S+\S+{{0,10}}\b{keyword{u var}\b(?:\S+\S+{0,10})
其中keyword{u var
是您的字母数字单词变量。是的,可以用Wiktor Stribiżew运行,谢谢