正则表达式:匹配除特定子字符串以外的所有行

2024-05-16 15:03:41 发布

您现在位置:Python中文网/ 问答频道 /正文

列表如下:

cf-ab1
cf-bc2
cf-ab1-hotfix
cf-bc2-hotfix
cf-ab1-canary
cf-cd1-staging
cf-cd1-staging2
cf-cd1
cf-cd1-sic-staging
cf-cd1-sagdf-staging

我想匹配除cf-cd1-staging, cf-cd1-staging2 and cf-ab1-canary之外的所有内容 我正在运行以下正则表达式:

 ^((?!canary|staging).)*$

但这些理想地匹配所有不包含staging和canary的行。。!这应该不是我想要的o/p

你能帮帮我吗。。!?因为我想要的匹配应该是:

cf-ab1
cf-bc2
cf-ab1-hotfix
cf-bc2-hotfix
cf-cd1
cf-cd1-sic-staging
cf-cd1-sagdf-staging

谨致问候

罗希思


Tags: and内容列表cfhotfixcanary理想staging
2条回答

与RegEx一样,有许多可能的解决方案。我提出了一个动态的,但你可以说,它是过度拟合的数据集,并不是很普遍。你知道吗

^cf-\w\w\d(-[hs][oia][tcg].+?)?$

我只是把所有“允许”的字母都写在方括号里,直到不需要的匹配不再可能。还有,我把下半场放进()?以便两个短条目也匹配。你知道吗

试试这个:-

import re

lines = ["cf-ab1", "cf-bc2", "cf-ab1-hotfix", "cf-bc2-hotfix", "cf-ab1-canary", "cf- 
cd1-staging", "cf-cd1-staging2", "cf-cd1", "cf-cd1-sic-staging", "cf-cd1-sagdf- 
staging"]

line_compile = re.compile('^(?!.*(ab1-canary|cd1-staging|cf-ab1-canary)).*$')

matched = []

for line in lines:
  if  line_compile.match(line):
     matched.append(line)

相关问题 更多 >