我有test{0:##}test2{Order:C}test3
这样的文字。我需要使用正则表达式并找到不在test
内的文本test2
,test3
,{...}
。
对于花括号内的文字{0:##},我使用了
@"{0:(.*?)}"
但是尝试不在Curly括号内的文字,面临一些困难。
答案 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
函数?