假设我有以下字符串GPH_EPL_GK_FIN我想要一个将在 python 中使用的正则表达式,它从 csv 文件(与此问题无关)中查找以 GPH 开头但不包含 EPL 的记录的此类字符串我知道胡萝卜^一开始是用来搜索的所以我有这样的东西^GPH_.*我也想包括不包含部分,我如何链接正则表达式?IE(^GPH_.*)(?!EPL)我想最终更进一步,并且返回没有 EPL 的任何记录,即GPH_ABC_JKL_OPQ包括GPH_在EPL零件之后即期望的结果GPH_EPL_ABC_JKL_OPQ
3 回答
largeQ
TA贡献2039条经验 获得超7个赞
要满足这两个要求:
编写一个模式以匹配以开头GPH但不包含的行EPL
将EPL_零件插入匹配行到特定位置
import re
# sample string containing lines
s = '''GPH_EPL_GK_FIN
GPH_ABC_JKL_OPQ'''
pat = re.compile(r'^(GPH_)(?!.*EPL.*)')
for line in s.splitlines():
print(pat.sub('\\1EPL_', line))
输出:
GPH_EPL_GK_FIN
GPH_EPL_ABC_JKL_OPQ
桃花长相依
TA贡献1860条经验 获得超8个赞
只需使用这个:
https://regex101.com/r/GwBsg2/2
图案:
^(?!^(?:[^_\n]+_)*EPL_?(?:[^_\n]+_?)*)(.*)GPH
代替:
\1GPH_EPL
标志:
gm
月关宝盒
TA贡献1772条经验 获得超5个赞
我只是猜测一种选择是,
(?<=^GPH_(?!EPL))
并且re.sub
,
EPL_
测试
import re print(re.sub(r"(?<=^GPH_(?!EPL))", "EPL_", "GPH_ABC_JKL_OPQ"))
输出
GPH_EPL_ABC_JKL_OPQ
添加回答
举报
0/150
提交
取消