首页 > 解决方案 > 使用正则表达式从文本中获取所有匹配项

问题描述

我有文字

文本示例(仅示例,我无法显示真实文本):

some words getServerResponse={go [for {a walk}] goodby }something hello world text={what[ i want {in curl} ]braces}, another string text={second[ {text what} i ]want number two}

在这个例子中,“文本”——它是我需要得到的标签。我们可以看到我需要的所有信息都包含在“text =”之后的大括号中。

我尝试使用此模板: text=(.*) 并期望从我的文本中获取列表中的两个元素:

{what[ i want {in curl} ]braces}, another string text={second[ {text what} i ]want number two}
{second[ {text what} i ]want number two}

第一个元素包含第二部分无关紧要,因为从第一个元素我只得到第一个打开的花括号和关闭第一个花括号的花括号之间的内容:

what[ i want {in curl} ]braces

但是这个text=(.*)模板只给了我一个变体

{what[ i want {in curl} ]braces}, another string text={second[ {text what} i ]want number two}

如何从我的文本中获取所有匹配项作为列表元素?

标签: pythonregex

解决方案


假设所有大括号都采用给定的格式,我想出了这个正则表达式。

(text=)(\{(\w|\[|\s|\{|\}|\])+)

这将在每个text=. 请注意,我添加了 3 个匹配组。第三组暂时可以忽略。

Group1=>text=

Group2=>{what[ i want {in curl} ]braces}{second[ {text what} i ]want number two}

您可以使用 match all 并提取第二个捕获组来获得您想要的结果。

正则表达式演示


推荐阅读