使用正则表达式我想检测开始和结束双花括号之间的文本/字符串,它应该检测任何内部花括号和文本。
例如:
{{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
答案 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来解决你的问题。