【发布时间】:2018-05-24 18:10:25
【问题描述】:
想象一下,我有一个多行字符串,其中包含格式为 {{ string_a }} 的标记,并且可以放置在它们自己的行上(可能有前导空格),或者与其他标记放在同一行上。
a: {{ string_a }}
b:
{{ string_b }}
我正在尝试编写一个匹配这些标记的内容并进行替换的正则表达式,但我还想根据它们是否存在于自己的行上运行一些条件逻辑。
我的原始正则表达式非常基本:\{\{\s*([A-Za-z_]+)\s*\}\},它在匹配标记方面做得很好。但是,当我尝试匹配前导空格并将其放入捕获组时,它只匹配那些有空格的,而我真的想要所有的标记,不管:
(^\s*)\{\{\s*([A-Za-z_]+)\s*\}\}
我想解决方案是使用某种前瞻/后瞻,但无论我尝试哪种方式,它似乎都失败了。不确定这是因为第一组中的^ 还是*,但无论如何它都不喜欢。
所以,我想要获取的捕获列表如下:
- 完整令牌
{{ string_a }} - 内弦
string_a - 空格与否
\s\s\s,在上面做布尔条件逻辑
【问题讨论】:
-
Python 标记,因为它是 pythonic 正则表达式语法,但如果看起来没有必要,可以删除
-
没关系,实际上我们基本上要求所有regex问题也指定语言或平台,最好使用合适的标签。
-
如果它在字符串的开头是一个可选空格,你不能用
(\s)?开始你的正则表达式 -
这看起来很可疑,就像您正在尝试使用正则表达式解析 YAML 或其他一些结构化格式。不要那样做。 Google for cthulhu zalgo html。
-
是的,我已经在 SO 上工作了 6 年多了,我看过 cthulhu 的帖子 ;)