我的输入字符串如下:
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
由于
答案 0 :(得分:0)
Regexp 无法根据一般的否定表达式(“不包含Z”)来描述字符串。在你的情况下,你试图表达像“以X开头并以Y结尾但不包含 Z的字符串”。在regexp中无法使用 NOT 。你的模式表达的是:“一个以X开头,以Y结尾,至少包含一个不是Z的地方的字符串。”这没有用。
我建议搜索更通用的表达式,然后使用像if 'cat' is in i:
这样的测试来测试它。这是直截了当的,每个人都能理解这一点。
更复杂的方法可能是搜索两个正则表达式的替代(OR),第一个是匹配此类表达式与 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)