如何使用正则表达式提取文本中所有text=后带嵌套大括号的内容
问题原因
你当前使用的text=(.*)存在两个问题导致只能拿到一个匹配结果:
- 正则默认仅返回第一个匹配项,未开启全局匹配模式
.*属于贪婪匹配,会从第一个text=的位置一直匹配到整行末尾,不会主动在后续text=的位置截断
解决方案
把正则修改为text=(.*?)(?=text=|$),同时开启全局匹配即可:
- 把
.*改为.*?启用非贪婪匹配,避免一次性匹配到行尾 - 新增正向预查
(?=text=|$),匹配到下一个text=标记或者行尾就停止当前匹配 - 不同编程语言开启全局匹配的方式不同:Python可直接用
re.findall方法、JavaScript需在正则末尾加g修饰符、Java需循环调用Matcher.find()方法
代码示例(Python)
import re raw_text = "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}" matches = re.findall(r"text=(.*?)(?=text=|$)", raw_text) print(matches)
输出结果
['{what[ i want {in curl} ]braces}, another string ', '{second[ {text what} i ]want number two}']
你可以直接对返回列表中的每个元素单独处理,提取大括号对应的内容即可。
内容的提问来源于stack exchange,提问作者Gleb
相关产品推荐
相关产品推荐

