首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正则表达式删除字符串对之间的所有内容,但不删除多个字符串对时的所有内容

正则表达式删除字符串对之间的所有内容,但不删除多个字符串对时的所有内容
EN

Stack Overflow用户
提问于 2018-09-11 02:34:18
回答 3查看 32关注 0票数 1

有没有一个正则表达式可以接受这个字符串:

代码语言:javascript
复制
"This is [D>aa <D] a [A>bb <A] test [D>ccc  cc <D]."

并返回以下内容:

代码语言:javascript
复制
"This is a [A>bb <A] test."

因此,基本上删除了所有以[D>开头和以<D]结尾的内容。这不可能是直接的,因为这些对会多次弹出,所以使用正则表达式[[D>].*[<D]]会返回:

代码语言:javascript
复制
"This is ."
EN

回答 3

Stack Overflow用户

发布于 2018-09-11 02:40:58

默认情况下,.*量词是贪婪的。这意味着它会尽可能多地匹配0个或更多字符,因此第一个匹配会一直延伸到第二个匹配的末尾。通过将其更改为.*?,它将使其变得懒惰,这样它将尽可能少地匹配0或更多的字符。以下是模式:

\[D>.*?<D\]

Demo

票数 0
EN

Stack Overflow用户

发布于 2018-09-11 02:41:04

这应该会起到作用;请注意惰性量词.*?,它将避免贪婪地使用尾随的<D]。我在括号前添加了一个可选的空格,以清理输出:

代码语言:javascript
复制
>>> 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.'
票数 0
EN

Stack Overflow用户

发布于 2018-09-11 03:33:29

如果这些对始终以[D>开头,并且始终由<D]匹配,则可以匹配一个空格,然后匹配[D>,然后使用一个被取反的字符类[^]]+匹配不是右方括号,最后匹配一个右方括号。

然后使用sub并替换为空字符串

[ ]\[D>[^]]+\]

Regex demo

代码语言:javascript
复制
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.

Demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52263594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档