Python 将变量传递给正则表达式extact

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

我试图使用另一列的值作为变量,使用Pandas进行正则表达式提取

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')”

的语法造成的,这里有几个问题:

  • 单词边界是用文字
    \b
    (r“\b”)设置的,而不是用退格字符(
    “\b”
    )设置的
  • 不能将变量放入常规的普通字符串文字中,需要使用
    format()
    或f-strings
  • 模式中还需要一个捕获组
你可以用

df['result']=df['text'].str.extract(fr'(((?:\S+\S+{{0,10}}}\b{keyword_var}\b(?:\S+\S+{0,10}))
注:

  • fr'…'
    -使用变量插值支持定义原始f字符串文字,并将反斜杠解析为文字字符
  • (((?:\S+\S+{{0,10}}\b{keyword\u var}\b(?:\S+\S+{0,10})
    -一个包含单个捕获组的模式,该组值将作为返回值
  • 如果您的
    关键字
    不是纯字母数字字符串,则需要重新考虑并转义内容,例如
    {re.escape(keyword_var)}

这里有两个问题:1)单词边界是用literal
\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运行,谢谢