首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex过滤器开头包含单词,但不包含另一个单词

Regex过滤器开头包含单词,但不包含另一个单词
EN

Stack Overflow用户
提问于 2019-09-05 19:14:40
回答 4查看 79关注 0票数 0

假设我有以下字符串

代码语言:javascript
运行
复制
GPH_EPL_GK_FIN

我希望在python中使用一个正则表达式,从csv文件中查找这样的字符串(与这个问题无关),以GPH开头但不包含EPL的记录。

我知道胡萝卜^最初是用来搜索的

所以我有这样的东西

代码语言:javascript
运行
复制
^GPH_.*

我想把不包含的部分也包括进去,我该如何链接这个正则表达式?即

代码语言:javascript
运行
复制
(^GPH_.*)(?!EPL)

我希望最终能更进一步,任何没有EPL返回的记录,即

代码语言:javascript
运行
复制
GPH_ABC_JKL_OPQ

GPH_之后包含EPL部件

即期望结果

代码语言:javascript
运行
复制
GPH_EPL_ABC_JKL_OPQ
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-09-05 19:24:53

为满足这两项要求:

  • 组合一个模式来匹配以GPH开头但不包含EPL的行
  • EPL_部件插入到特定位置的匹配线中
代码语言:javascript
运行
复制
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))

产出:

代码语言:javascript
运行
复制
GPH_EPL_GK_FIN
GPH_EPL_ABC_JKL_OPQ
票数 2
EN

Stack Overflow用户

发布于 2019-09-05 19:22:44

我想,这里就可以了:^GPH_(?!EPL).*

这将返回以GPH开头且在GPH_之后没有EPL的任何字符串。

票数 1
EN

Stack Overflow用户

发布于 2019-09-05 19:28:00

我猜其中一个选择就是,

代码语言:javascript
运行
复制
(?<=^GPH_(?!EPL))

re.sub一起,

代码语言:javascript
运行
复制
EPL_

测试

代码语言:javascript
运行
复制
import re   

print(re.sub(r"(?<=^GPH_(?!EPL))", "EPL_", "GPH_ABC_JKL_OPQ"))

输出

代码语言:javascript
运行
复制
GPH_EPL_ABC_JKL_OPQ
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57811727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档