正则表达式匹配字符串

时间:2015-03-12 18:07:42

标签: regex

我有以下字符串: @name {名称:名称} @

我正在寻找一个匹配该字符串的正则表达式模式(当然名称可以是任何东西) 正则表达式还应该匹配name:name可以是name:name,name:name多次的情况。

提前感谢。

2 个答案:

答案 0 :(得分:0)

考虑name将保持不变:

@([^\{]+)\{(\1:\1)(,\2)*\}@

检查:https://regex101.com/r/kX2fS0/2

答案 1 :(得分:0)

@[^{]+\{[^:]+:[^},]+(,[^:]+:[^},]+)*\}@

这个正则表达式的含义很简单:总是避免匹配即将出现的分隔符。

让我们说,在开始时,[^{]+将匹配所有内容,直到第一个{,以便抓住其中的所有字符。

[^:]+:[^},]+匹配{}中的第一个匹配项,

(,[^:]+:[^},]+)*是尝试匹配可选逗号分隔部分的部分。

这是python中的测试用例:

>>> re.match(r'@[^{]+\{[^:]+:[^},]+(,[^:]+:[^},]+)*\}@', r'@table{name:tablea,partiton:id}@') is not None
True