正则表达式,用于检测双花括号之间的文本

时间:2014-01-05 17:19:36

标签: python regex string

使用正则表达式我想检测开始和结束双花括号之间的文本/字符串,它应该检测任何内部花括号和文本。

例如:

{{detect this {{and this as well}} text}} but text does not ends here so it should {{not detect this}}.

我写了这个正则表达式

\{\{[\s\S]+\}\}

但是这会选择整个字符串FROM {{detect this .... TO {{not detect this}}

注意:我正在使用python re

2 个答案:

答案 0 :(得分:2)

Pyparsing允许您定义递归语法,但是对于像这样的常见语法有一些内置助手。请参阅下面带注释的代码示例:

from pyparsing import nestedExpr, ungroup, originalTextFor

# use nestedExpr to define a default expression with left-right nesting markers
nestedText = ungroup(nestedExpr('{{','}}'))

sample = """{{detect this {{and this as well}} text}} but text does not ends here so it should {{not detect this}}."""

# note how reporting the results as a list keeps the nesting of {{ }}'s
print nestedText.parseString(sample).asList()
# prints ['detect', 'this', ['and', 'this', 'as', 'well'], 'text']

# if you just want the string itself, wrap with 'originalTextFor'
print originalTextFor(nestedText).parseString(sample)[0]
# prints {{detect this {{and this as well}} text}}

答案 1 :(得分:0)

首先{{[\s\S]+}} (几乎){{.+}}相同。 原因:\s包含所有空格,\S包含不是空格的所有内容。 我通常会避免使用[]中的大写字符类,这通常会引起混淆。

其次:我认为我在船上,我不能很快想到RegEx来解决你的问题。