在Python中提取大括号之间的文本

Moh*_*hit 5 python regex

我有一串如下所示的文本

1. Foobar { abc } ( Explanation - Foo { cde } - Count - 5301435 ) 2. Foobaz { memo } ( Explanation - baz {bleh } - Count - 13946664 )

我想提取 上面字符串中的abcand 。memo我的正则表达式基本上如下[链接 此处] {(?:[^{}])*} 但它捕获了所有内容(returns abc, cde, memo, bleh)

C8H*_*4O2 7

我会保持简单。

import re

s = '1. Foobar { abc } ( Explanation - Foo { cde } - Count - 5301435 ) 2. Foobaz { memo } ( Explanation - baz {bleh } - Count - 13946664 )'

s_without_parens = re.sub('\(.+?\)','',s)

text_in_brackets = re.findall('{(.+?)}',s_without_parens)

text_in_brackets

[' abc ', ' memo ']
Run Code Online (Sandbox Code Playgroud)

因此,您可以将其嵌套为re.findall('{(.+?)}',re.sub('\(.+?\)','',s)),但我发现将其分解为逻辑步骤很有帮助。


hee*_*ayl 1

你可以做:

\d+\.[^{]*{\s+([^}]+)\s+}
Run Code Online (Sandbox Code Playgroud)

并获取捕获的组。

  • \d+\.匹配一个或多个数字,后跟一个.

  • [^{]*匹配到下一个{, {\s+matches {,后跟一个或多个空格

  • 捕获的组,([^}]+)匹配下一个}

  • \s+}匹配一个或多个空格,后跟}

例子:

In [48]: blob = '1. Foobar { abc } ( Explanation - Foo { cde } - Count - 5301435 ) 2. Foobaz { memo } ( Explanation - baz {bleh } - Count - 13946664 )'

In [49]: re.findall(r'\d+\.[^{]*{\s+([^}]+)\s+}', blob)
Out[49]: ['abc', 'memo']
Run Code Online (Sandbox Code Playgroud)