Python 匹配正则表达式字符串,但也返回可选的前导空格

Python 匹配正则表达式字符串,但也返回可选的前导空格,python,regex,Python,Regex,假设我有一个多行字符串,它包含格式为{{string_a}}的标记,可以放在它们自己的行上,可能有前导空格,或者与其他标记放在同一行上 a: {{ string_a }} b: {{ string_b }} 我正在尝试编写一个正则表达式,它将匹配这些令牌的内容并进行替换,但我也希望根据它们是否存在于自己的行中来运行一些条件逻辑 我的原始正则表达式非常基本:\{\s*[A-Za-z\]+\s*},它在匹配令牌方面做得很好。但是,当我尝试匹配前导空格并将其放入捕获组时,它只匹配带空格的空格,

假设我有一个多行字符串,它包含格式为{{string_a}}的标记,可以放在它们自己的行上,可能有前导空格,或者与其他标记放在同一行上

a: {{ string_a }}

b:
  {{ string_b }}
我正在尝试编写一个正则表达式,它将匹配这些令牌的内容并进行替换,但我也希望根据它们是否存在于自己的行中来运行一些条件逻辑

我的原始正则表达式非常基本:\{\s*[A-Za-z\]+\s*},它在匹配令牌方面做得很好。但是,当我尝试匹配前导空格并将其放入捕获组时,它只匹配带空格的空格,而实际上我需要所有标记:

(^\s*)\{\{\s*([A-Za-z_]+)\s*\}\}
我想解决办法是使用某种前瞻/后瞻,但无论我尝试哪种方法,它似乎都失败了。不确定这是因为第一组中的“^”还是“*”,但它不喜欢这两种方式

因此,我想得到的捕获列表如下:

完整标记{{string_a}} 内部字符串_a 空白或非空白\s\s\s,对其执行布尔条件逻辑 试试^\s*?\{\s*[A-Za-z\]+\s*}。唯一的区别是一个


^\s*的问题是,^不是可选的。

Python标记,因为它是pythonic regex语法,但如果它看起来不必要,可以删除。这很好,实际上我们基本上要求所有问题也指定语言或平台,理想情况下,使用合适的标记。如果字符串开头有一个可选空格,则不能使用\s启动正则表达式吗?这看起来很可疑,好像您正试图用正则表达式解析YAML或其他结构化格式。不要那样做。谷歌搜索cthulhu zalgo html。是的,我已经这样做了6年多,我看到了cthulhu帖子;啊,这太简单了,应该是显而易见的!星期一早上9点之前喝咖啡都怪大脑。试图使lookbehinds过于复杂化。顺便说一句,转义{and}仅在解析器不明确时才有必要^\s*?{{\s*[A-Za-z!]+\s*}也一样有效。是的,我只是习惯性地这么做。另外一个问题,我的re.finditer似乎与空白组不匹配。结果总是一无所获。我丢了一面旗吗?我所能说的就是啦啦队旗。感激