繁体   English   中英

使用正则表达式在多行字符串中使用。(点)匹配除少数几个字符以外的所有字符

[英]Match all characters except a few using .(dot) in multiline string using Regex

我的输入字符串如下:

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

谢谢

基于一般阴性表达(“不含有Z”)的正则表达式不能描述的字符串。 在您的情况下,您试图表达sth之类的东西,例如“以X开头且以Y结尾但不包含 Z的字符串”。 在regexp中不能包含NOT 模式所要表达的是:“一个字符串,以X开头,以Y结尾,并且至少包含一个非Z的位置。” 这没有帮助。

我建议搜索更通用的表达式,然后使用sth进行测试,例如if 'cat' is in i: 这很简单,每个人都可以理解。

一种更复杂的方法是搜索两个正则表达式的替代(OR),第一个是将这样的表达式内部cat匹配,另一个将所有表达式与该开头和结尾部分匹配。 然后,如果您将两个备选方案都捕获到不同的组中,则可以轻松地确定所填充的组中有哪种备选方案(有或没有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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM