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

在python中提取大括号之间的文本,python,regex,Python,Regex,我有一个如下的文本字符串 1。Foobar{abc}(解释-Foo{cde}-Count-5301435)2。Foobaz{memo}(解释-baz{bleh}-Count-13946664) 我想提取 上述字符串中的abc和memo。 我的正则表达式如下[链接] 基本上{(?:[^{}])*} 但它捕获了所有内容(返回abc、cde、memo、bleh)您可以执行以下操作: \d+\.[^{]*{\s+([^}]+)\s+} 抓到被俘的人 \d+\。匹配一个或多个数字,后跟一个 [^{]*

我有一个如下的文本字符串

1。Foobar{abc}(解释-Foo{cde}-Count-5301435)2。Foobaz{memo}(解释-baz{bleh}-Count-13946664)

我想提取 上述字符串中的
abc
memo
。 我的正则表达式如下[链接] 基本上
{(?:[^{}])*}
但它捕获了所有内容
(返回abc、cde、memo、bleh)
您可以执行以下操作:

\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']

我会保持简单

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))
,但我发现将其分解为逻辑步骤很有帮助。

那么您希望每行上的第一个元素吗?那么您只希望每个字符串中的第一个实例吗?@C8H10N4O2是的..那么您希望文本嵌套在大括号中,而不是嵌套在括号中吗?您能完整地解释该要求吗?这对于正则表达式来说相当棘手,而且相当简单使用有状态解析器很容易。我建议放弃正则表达式方法。