0

我的输入字符串如下:

The dog is  black 
and beautiful

The dog and the cat
is black and beautiful

仅当未描述猫时,我才想将“黑色”替换为“深色”。所以我的输出应该是

The dog is  dark 
and beautiful

The dog and the cat
is black and beautiful


pRegex = re.compile(r'(The.*?(?!cat)ful)', re.DOTALL)
for i in  pRegex.finditer(asm_file):
    res = i.groups()
    print res

有了这个,在这两种情况下都替换了“黑色”。

正则表达式有什么问题吗?我正在使用 python 2.7

谢谢

4

1 回答 1

0

正则表达式不能描述基于一般否定表达式(“不包含 Z”)的字符串。在您的情况下,您尝试表达“以 X 开头并以 Y 结尾但不包含Z 的字符串”。不包含在正则表达式中是不可能的。您的模式导致表达的是:“以 X 开头并以 Y 结尾并包含至少一个不是 Z 的位置的字符串。” 这没有帮助。

我建议搜索更通用的表达式,然后使用 sth like 进行测试if 'cat' is in i:。这是直截了当的,每个人都能理解。

一种更复杂的方法可能是搜索两个正则表达式的替代 (OR),第一个是一个将此类表达式 catinside 匹配,另一个将所有表达式与该开始和结束部分匹配。如果您随后在不同的组中捕获这两种替代方案,您可以轻松地确定填充的组您有哪个替代方案(有或没有 cat)。但这仅在您可以在我认为您不能指定的组之间指定真正的分隔符时才有效;-) 无论如何,这是我的意思的一个示例:

r = re.compile(r'(The[^|]*?cat[^|]*?ful)|(The[^|]*?ful)')
text = 'The dog is  black and beautiful | The dog and the cat is black and beautiful'
for i in r.finditer(text):
  print i.groups()

印刷:

(None, 'The dog is  black and beautiful')
('The dog and the cat is black and beautiful', None)
于 2013-11-14T10:46:34.173 回答