解决含右括号的目标词在DataFrame句子中匹配索引的正则报错问题
正则匹配含特殊字符目标词的起始索引问题
示例数据
import pandas as pd df = pd.DataFrame({ 'sentence': { 0: 'idontlike)anap:ple.dislike)', 1: 'welcomet)omyroom.plzcomein', 2: 'thisis)thetable' }, 'target': { 0: 'like)', 1: 'come', 2: 'is)' } })
问题描述
需要提取每一行sentence中target词的精确起始索引(允许重复匹配),比如第一行的like)在句子里出现两次,对应索引应为5和20。但使用以下代码时,因部分target包含右括号(正则表达式的特殊元字符),会抛出error: unbalanced parenthesis at position 4错误:
df.apply(lambda x: [m.start() for m in re.finditer(x.target, x.sentence)], axis=1)
要求:禁止用split拆分句子,必须保留句子无空格状态,同时保留target中的右括号。
解决方案
右括号是正则的特殊语法字符,直接匹配会被解析成正则规则而非字面字符。只需用re.escape()对target进行转义,将所有正则特殊字符转换为字面量即可:
import re df['start_indices'] = df.apply(lambda x: [m.start() for m in re.finditer(re.escape(x.target), x.sentence)], axis=1)
验证结果
运行后df['start_indices']的输出符合预期:
- 第一行:
[5, 20] - 第二行:
[18] - 第三行:
[4]
内容的提问来源于stack exchange,提问作者jmin
相关产品推荐
相关产品推荐

