我有一个像test{0:##}test2{Order:C}test3
. 我需要使用正则表达式test
并找到不在test2
.test3
{...}
对于花括号 {0:##} 内的文本,我使用了
@"{0:(.*?)}"
但是尝试不在大括号内的文本,面临一些困难。
如果没有嵌套大括号,您可以使用以下内容:
(?<=^|})[^{]+(?={|$)
这使用lookbehind 和lookahead 来查找嵌入}...{
或由一端的字符串的开头或结尾分隔的片段。
快速 PowerShell 测试:
PS> [regex]::Matches('test{0:##}test2{Order:C}test3', '(?<=^|})[^{}]+(?={|$)') | select Value
Value
-----
test
test2
test3
与其匹配大括号外的所有内容(如 Joey 所建议的那样),通过仅匹配大括号的表达式将字符串拆分为数组可能更容易。
result = Regex.Split(teststring, "\{[^}]*\}");
如果文本始终采用相同的格式,为什么不使用该Split
功能?