假设我有以下字符串
GPH_EPL_GK_FIN
我想要一个正则表达式,该表达式必须在python中使用,以便从csv文件(与该问题无关)中查找此类字符串,以以GPH开头但DONT包含EPL的记录
我知道胡萝卜^
用于开始搜索
所以我有这样的东西
^GPH_.*
我也想包含NOT包含部分,如何链接正则表达式? 即
(^GPH_.*)(?!EPL)
我最终希望进一步走下去,并返回没有EPL的所有记录,即
GPH_ABC_JKL_OPQ
在GPH_
部分EPL
之后加入
即理想的结果
GPH_EPL_ABC_JKL_OPQ
答案 0 :(得分:2)
要满足这两个要求:
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
答案 1 :(得分:1)
我认为这可以做到:
^GPH_(?!EPL).*
这将返回任何以GPH
开头并且在EPL
之后没有GPH_
的字符串。
答案 2 :(得分:1)
我只是在猜测一种选择,
(?<=^GPH_(?!EPL))
和re.sub
与
EPL_
import re
print(re.sub(r"(?<=^GPH_(?!EPL))", "EPL_", "GPH_ABC_JKL_OPQ"))
GPH_EPL_ABC_JKL_OPQ
答案 3 :(得分:1)
只需使用此:
https://regex101.com/r/GwBsg2/2
^(?!^(?:[^_\n]+_)*EPL_?(?:[^_\n]+_?)*)(.*)GPH
\1GPH_EPL
gm