正则表达式平衡对字符分隔

时间:2013-10-16 22:02:56

标签: c# regex nested delimited

第一次张贴所以要温柔。 我的目标是匹配由逗号分隔的第一组括号内的一组字符(除非是数字),同时忽略空格。诀窍是不匹配嵌套在另一组括号中的逗号。我的解决方案似乎有效,所以我想分享我的解决方案,并获得任何其他更好的解决方案的输入。

我的示例输入字符串是:

test[ [a], b1 ,  1,2 , cc[nn[ 99],oo[ g  , l]],dd].test2[ ee , 22 ]

期望的比赛:

1. "[a]"
2. "b1"
3. "cc[nn[ 99],oo[ g  , l]]"
4. "dd"
5. "ee"

解决方案:

Regex regexObj = new Regex(
@"(?<=[,\[]\s*)  (?# Match must start with, but not include, opening bracket or comma)
  (?![0-9])      (?# Do not match if followed by a number)
  (?>            (?# Start atomic group, do not backtrack inside the match)
   (?(DEPTH)     (?#  Check IF inside an un-closed bracket group THEN)
    [^\[\]]      (?#   match any char except brackets)
   |             (?#  ELSE closed)
    [^\s,\[\]])  (?#   delimit by comma)
  |              (?# OR)
   (?'DEPTH'\[)  (?#  Match open bracket and increase DEPTH count)
  |              (?# OR)
   (?'-DEPTH'\]) (?#  Match closed bracket and decrease DEPTH count)
  )*             (?# Continue atomic group)
 (?(DEPTH)(?!))  (?# Ensure the match has a balanced set of brackets)
 (?=\s*[,\]])    (?# Match must end with a comma or closing bracket)",
RegexOptions.IgnorePatternWhitespace);

我在这里找到的例子C# Regex - How to remove multiple paired parentheses from string

0 个答案:

没有答案