有没有一个正则表达式可以接受这个字符串:
"This is [D>aa <D] a [A>bb <A] test [D>ccc cc <D]."
并返回以下内容:
"This is a [A>bb <A] test."
因此,基本上删除了所有以[D>
开头和以<D]
结尾的内容。这不可能是直接的,因为这些对会多次弹出,所以使用正则表达式[[D>].*[<D]]
会返回:
"This is ."
发布于 2018-09-11 02:40:58
默认情况下,.*
量词是贪婪的。这意味着它会尽可能多地匹配0个或更多字符,因此第一个匹配会一直延伸到第二个匹配的末尾。通过将其更改为.*?
,它将使其变得懒惰,这样它将尽可能少地匹配0或更多的字符。以下是模式:
\[D>.*?<D\]
发布于 2018-09-11 02:41:04
这应该会起到作用;请注意惰性量词.*?
,它将避免贪婪地使用尾随的<D]
。我在括号前添加了一个可选的空格,以清理输出:
>>> import re
>>> s = "This is [D>aa <D] a [A>bb <A] test [D>ccc cc <D]."
>>> re.sub(r"( ?\[D>.*?<D\])", "", s)
'This is a [A>bb <A] test.'
发布于 2018-09-11 03:33:29
如果这些对始终以[D>
开头,并且始终由<D]
匹配,则可以匹配一个空格,然后匹配[D>
,然后使用一个被取反的字符类[^]]+
匹配不是右方括号,最后匹配一个右方括号。
然后使用sub并替换为空字符串
[ ]\[D>[^]]+\]
import re
s = "This is [D>aa <D] a [A>bb <A] test [D>ccc cc <D]."
print(re.sub(r"[ ]\[D[^]]+\]", "", s)) # This is a [A>bb <A] test.
https://stackoverflow.com/questions/52263594
复制相似问题