存在多个大括号时如何使用正则表达式获取完全匹配的短语

how to take exact matched phrases using regular expression when multiple braces are present

我有这样的短信

1) <img="" id="">data</img>
2) (hi "hello") data (some text)

我只想删除带有大括号和 angular 方括号的文本并提取数据之间的内容。我试过了

re.compile(r"\(.*\)")
re.compile(r"<.*>")

但由于右大括号位于文本末尾,因此在使用 re.sub 时整个文本将被删除。 如何取多个大括号(angular或花括号)

之间的唯一数据

尝试非贪婪正则表达式,即

re.compile(r"\(.*?\)")
re.compile(r"<.*?>")
In [68]: re.sub(r'<(.+?)>', '', '<img="" id="">data</img>')
Out[68]: 'data'

正则表达式解释:

<(.+?)>

Debuggex Demo

In [68]: re.sub(r'\((.+?)\)', '', '(hi "hello") data (some text)')
Out[68]: ' data '

正则表达式解释:

\((.+?)\)

Debuggex Demo

阅读 http://www.regular-expressions.info/repeat.html

中的 'Watch Out for The Greediness!' 部分