如何找到大括号内未包含的文本

时间:2012-07-23 11:37:42

标签: c# regex

我有test{0:##}test2{Order:C}test3这样的文字。我需要使用正则表达式并找到不在test内的文本test2test3{...}

对于花括号内的文字{0:##},我使用了

@"{0:(.*?)}"

但是尝试不在Curly括号内的文字,面临一些困难。

3 个答案:

答案 0 :(得分:2)

如果没有嵌套大括号,您可以使用以下内容:

(?<=^|})[^{]+(?={|$)

这使用lookbehind和lookahead来查找嵌入在}...{中或由一端字符串的开头或结尾分隔的片段。

快速PowerShell测试:

PS> [regex]::Matches('test{0:##}test2{Order:C}test3', '(?<=^|})[^{}]+(?={|$)') | select Value

Value
-----
test
test2
test3

答案 1 :(得分:1)

不是匹配大括号外的所有内容(如Joey所建议的那样),通过仅匹配大括号的表达式将字符串拆分为数组可能更容易。

result = Regex.Split(teststring, "\{[^}]*\}");

答案 2 :(得分:0)

如果文本总是采用相同的格式,为什么不使用Split函数?