是否存在可以使用此字符串的正则表达式:
"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 ."
答案 0 :(得分:0)
默认情况下,.*
量词是贪婪的。这意味着它会尽可能多地匹配0个或多个字符,因此您的第一个匹配一直延伸到第二个匹配的结尾。通过将其更改为.*?
可以使其变得很懒惰,它将尽可能少地匹配0个或多个字符。这是模式:
\[D>.*?<D\]
答案 1 :(得分:0)
这应该可以解决问题;请注意,惰性量词.*?
可以避免贪婪地消耗结尾的<D]
。我在方括号之前添加了一个可选空格以清理输出:
import re
s = "This is [D>aa <D] a [A>bb <A] test [D>ccc cc <D]."
print(re.sub(r"( ?\[D>.*?<D\])", "", s))
输出:
This is a [A>bb <A] test.
答案 2 :(得分:0)
如果两对始终以[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.