为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式过滤器在开头包含单词但不包含另一个单词

正则表达式过滤器在开头包含单词但不包含另一个单词

当年话下 2022-05-19 15:40:05
假设我有以下字符串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


查看完整回答
反对 回复 2022-05-19
?
桃花长相依

TA贡献1860条经验 获得超8个赞

只需使用这个:

https://regex101.com/r/GwBsg2/2

  • 图案:^(?!^(?:[^_\n]+_)*EPL_?(?:[^_\n]+_?)*)(.*)GPH

  • 代替:\1GPH_EPL

  • 标志:gm


查看完整回答
反对 回复 2022-05-19
?
月关宝盒

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


查看完整回答
反对 回复 2022-05-19
  • 3 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信