初投稿なのでお手柔らかに。私の目標は、空白を無視しながら、コンマで区切られた最初の括弧のセット内の文字のグループ (数値の場合を除く) を一致させることでした。トリックは、別の括弧のセットにネストされたコンマと一致しないことでした。私の解決策は機能しているように見えるので、私の解決策を共有し、他のより良い解決策について意見を求めたいと思いました。
私の入力文字列の例は次のとおりです。
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 - 文字列から複数のペアの括弧を削除する方法