Python 如何在花括号中捕获文本,并在花括号中添加特定图案

Python 如何在花括号中捕获文本,并在花括号中添加特定图案,python,regex,Python,Regex,如果部分字符匹配,我将尝试捕获花括号(包括花括号)之间的字符 我尝试了下面的正则表达式模式,但它从整个字符串的第一个花括号和最后一个花括号开始抓取所有内容 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和c}”,但是我得到的是“{name\

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

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

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和c}”,但是我得到的是“{name\u of_list}列表包含{list:a、b和c}”。

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

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

请参阅和

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

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

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

[^{}]*?
替换
匹配除换行字符以外的任何字符,这就是为什么。请尝试
r”(\{.+})
r'{[^}]*:a、b和c
(如果没有
)也似乎有效?@Dino是的,我假设计划是1)只匹配没有
{
}
的子字符串,2)
前面的字符串:
比后面的部分短(那么惰性量词更有效)。如果第二部分较短,我会使用贪婪的量词。啊!我从来没有想过效率。谢谢你的澄清!这很有效。谢谢你!仅供参考,我最终根据你的建议,使用模式
\{[^{}::::*:a、b和c[^{}]*}
。这是因为我需要分别捕获
{list:a、b和c}
(上面的代码中未显示),这与
{list:a、b和c}
不同。
r'\{[^{}:]*:[^{}]*}'