[英]Extracting text between curly braces in python
我有一串如下的文字
1. Foobar { abc } ( Explanation - Foo { cde } - Count - 5301435 ) 2. Foobaz { memo } ( Explanation - baz {bleh } - Count - 13946664 )
我想在上面的字符串中提取abc
和memo
。 我正则表达式为[链接如下这里]基本{(?:[^{}])*}
但它抓住一切(returns abc, cde, memo, bleh)
我会保持简单。
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 ']
因此,您可以将其嵌套为re.findall('{(.+?)}',re.sub('\\(.+?\\)','',s))
,但是我发现将其分解为逻辑步骤。
你可以做:
\d+\.[^{]*{\s+([^}]+)\s+}
并获取捕获的组。
\\d+\\.
匹配一个或多个数字,后跟一个.
[^{]*
匹配到下一个{
, {\\s+
匹配{
,后跟一个或多个空格
捕获的组([^}]+)
匹配到下一个}
\\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']
简单的re.findall()
方法:
import re
s = '1. Foobar { abc } ( Explanation - Foo { cde } - Count - 5301435 ) 2. Foobaz { memo } ( Explanation - baz {bleh } - Count - 13946664 )'
result = re.findall(r'\{ ([^{}]+) \} (?=\()', s)
print(result)
输出:
['abc', 'memo']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.