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

时间:2017-12-11 08:54:16

标签: python regex

想象一下,我有一个多行字符串,其中包含格式为{{ string_a }}的标记,并且可以放在可能的前导空格的自己的行上,或者放在与其他标记相同的行上。

a: {{ string_a }}

b:
  {{ string_b }}

我正在尝试编写一个与这些令牌的内容匹配的正则表达式并进行替换,但我还想根据它们是否存在于自己的行中来运行一些条件逻辑。

我的原始正则表达式非常基本:\{\{\s*([A-Za-z_]+)\s*\}\}并且它可以很好地匹配令牌。但是,当我尝试匹配前导空格并将其放入捕获组时,它只匹配具有空格的那些,当我真正想要所有令牌时:

(^\s*)\{\{\s*([A-Za-z_]+)\s*\}\}

Broken regex

我认为解决方案是使用某种前瞻/后视,但无论我尝试什么,它似乎都会破坏。不确定这是否是因为第一组中的^*,但它不喜欢它。

所以,我想要获取的是我的捕获列表如下:

  • 完整令牌{{ string_a }}
  • 内部字符串string_a
  • 是否为空格\s\s\s,在
  • 上做布尔条件逻辑

1 个答案:

答案 0 :(得分:1)

试试(^\s*)?\{\{\s*([A-Za-z_]+)\s*\}\}。唯一的区别是单?

enter image description here

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