当前位置: 首页 > 知识库问答 >
问题:

如何在这些花括号内捕获具有特定模式的花括号之间的文本

赏弘
2023-03-14

如果部分字符匹配,我会尝试捕捉花括号(包括花括号)之间的字符。

我尝试了下面的正则表达式模式,但它从整个字符串中的第一个花括号和最后一个花括号开始抓取所有内容。

string = "The {name_of_list} list contains {list:a, b, and c}. This list should be formatted as a, b, and c."

r"(\{.*?:a, b, and c\})"gm

我想捕获{list: a, b, and c},但是我得到的是{name_of_list}list包含{list: a, b, and c}。

共有1个答案

张鹏云
2023-03-14

.模式匹配除换行符以外的任何字符,这就是为什么您会得到意想不到的结果。

为了使它与您需要的匹配,您需要“调整”点,在这里,最好使用一个否定字符类,[^{](除{之外的任何字符)或[^{}](除{}之外的任何字符):

import re
s = "The {name_of_list} list contains {list:a, b, and c}. This list should be formatted as a, b, and c."
print(re.findall(r'\{[^{}]*?:a, b, and c}', s))

请参阅regex演示和Python演示。

要匹配大括号中包含的任何字符串,可以使用

r'\{[^{}:]*:[^{}]*}'

请参阅包含在第一个否定字符类中的,它允许我们使用贪婪的*量词来提高效率。

 类似资料:
  • 问题内容: 我对这个尖角世界是陌生的,我对使用双花括号{{}}和单花括号{}感到困惑,或者有时不使用花括号来包含指令中的表达式 问题答案: {{}}-双大括号: 是Angular表达式,当您希望将内容编写为HTML时非常方便: 不要在已经是表达式的地方使用它们! 例如,该指令将引号之间的任何内容都视为一个表达式: {}-大括号: 我们知道JavaScript代表对象。这里也没有什么不同: 使用一些

  • 假设一个字符串的格式如下: 我想提取: 什么正则表达式可以用于这样的提取? 我被这个困住了:

  • 问题内容: 有没有一种快速的方法可以使Eclipse将花括号放在代码块的下一行上(本身)? 问题答案: 对于预先编写的代码块,请先按照Don的建议进行设置,然后选择该代码段,然后右键单击SourceCode->Format,然后按照首选项中的设置进行格式化。

  • 我需要解析一个日志文件并获取时间和相关的函数调用字符串,该字符串存储在日志文件中,如下所示:{“time”:“2012-09-24t03:08:50”,“message”:“call()started”} 在其他字符串字符之间会有多个日志时间函数调用,因此我希望使用regex来遍历文件并获取所有这些 我想获取整个记录的信息,包括花括号 我不断得到非法重复错误,请帮助!谢了。

  • 我正在尝试编写一个正则表达式模式,并使用split函数对所有句点进行拆分,除非这些句点位于开括号和闭括号或花括号之间。我想我是对的,因为在一个在线正则表达式测试程序中,当我运行拆分时,它正确地突出显示了我想要拆分的周期,它拆分的不仅仅是周期,还创建了一个长列表。我想我正在做一些明显的事情,但似乎无法理解。请看下面的内容。谢谢 到目前为止我所拥有的: Regex到目前为止: .(? =([^]]([

  • 问题内容: 我需要某种方式来捕获方括号之间的文本。因此,例如,以下字符串: 可用于创建以下数组: 我有以下正则表达式,但它仅捕获第一个实例,因此: 如何获得所需的输出?请注意,方括号从不嵌套,因此不必担心。 问题答案: 匹配所有带括号的字符串: 如果要不带括号的字符串: 不带括号的替代版本,较慢的匹配版本(使用“ *”代替“ [^]”):