下面是列表:
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).)*$
但是理想情况下,这些匹配所有不包含分段和金丝雀的行。这不应该是我想要的输出。
请在这里帮忙..!?因为我想要的匹配项应该是:
cf-ab1
cf-bc2
cf-ab1-hotfix
cf-bc2-hotfix
cf-cd1
cf-cd1-sic-staging
cf-cd1-sagdf-staging
此致
罗伊斯
答案 0 :(得分:1)
尝试一下:-
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)
答案 1 :(得分:0)
与RegEx一样,有很多可能的解决方案。我想出了一个动态的方法,但是您可能会说它已经过度适合该数据集,而且没有很笼统。
^cf-\w\w\d(-[hs][oia][tcg].+?)?$
我只是在方括号中写下了所有“允许的”字母,直到不再可能出现不希望的匹配为止。另外,我将后半部分放在()中?这样两个短条目也将匹配。