1

我有一个像test{0:##}test2{Order:C}test3. 我需要使用正则表达式test并找到不在test2.test3{...}

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

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

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

4

3 回答 3

2

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

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

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

快速 PowerShell 测试:

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

Value
-----
test
test2
test3
于 2012-07-23T12:16:17.447 回答
1

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

result = Regex.Split(teststring, "\{[^}]*\}");
于 2012-07-23T12:36:05.637 回答
0

如果文本始终采用相同的格式,为什么不使用该Split功能?

于 2012-07-23T12:24:43.807 回答