Dies ist ein guter Weg, um es mit ausgewogenem Text zu tun.
(\[ \d+ \]) # (1)
| # or,
\[ # Opening bracket
(?> # Then either match (possessively):
[^\[\]]+ # non - brackets
| # or
\[ # [ increase the bracket counter
(?<Depth>)
| # or
\] # ] decrease the bracket counter
(?<-Depth>)
)* # Repeat as needed.
(?(Depth) # Assert that the bracket counter is at zero
(?!)
)
\] # Closing bracket
C# Probe
string sTestSample = "[] [ds*[000112]] [1448472995] sample string [1448472995] ***";
Regex RxBracket = new Regex(@"(\[\d+\])|\[(?>[^\[\]]+|\[(?<Depth>)|\](?<-Depth>))*(?(Depth)(?!))\]");
Match bracketMatch = RxBracket.Match(sTestSample);
while (bracketMatch.Success)
{
if (bracketMatch.Groups[1].Success)
Console.WriteLine("{0}", bracketMatch);
bracketMatch = bracketMatch.NextMatch();
}
Ausgabe
[1448472995]
[1448472995]
Mit anderen Worten, Sie möchten eine Klammerzahl nur dann anpassen, wenn die gleiche Anzahl von (ausgeglichenen) öffnenden und schließenden Klammern folgt? –
Sie müssen ausgeglichene Textregex verwenden, um verschachtelte Klammern auszuschließen. – sln
@Tim: Ja, du hast Recht. – Sameer