Muszę znaleźć regex dla []Regex do niczego między []
Na przykład, jeśli ciąg jest - Cześć [Stos] Oto mój [Tag], które muszę [Znajdź].
Należy zwrócić stos, Tag, Znajdź
Muszę znaleźć regex dla []Regex do niczego między []
Na przykład, jeśli ciąg jest - Cześć [Stos] Oto mój [Tag], które muszę [Znajdź].
Należy zwrócić stos, Tag, Znajdź
Całkiem proste, wystarczy (1) wsporniki ucieczki z ukośniki, oraz (2) używać (.*?)
do przechwytywania zawartości.
\[(.*?)\]
Nawiasy są grupą przechwytującą, przechwytują ich zawartość do późniejszego wykorzystania. Znak zapytania po .*
powoduje, że pasujący non-chciwy. Oznacza to, że dopasuje najkrótszy możliwy mecz, a nie najdłuższy. Różnica między chciwy i zachłanny nie pojawia się, gdy masz wiele mecze w linii:
Hi [Stack], Here is my [Tag] which i need to [Find].
^______________________________________________^
Chciwy mecz znajdzie najdłuższy pomiędzy dwoma zestawami znaków w nawiasach kwadratowych. To nie tak. Non-chciwy mecz znajdzie najkrótszy:
Hi [Stack], Here is my [Tag] which i need to [Find].
^_____^
Anyways, kod zakończy się looking like:
string regex = @"\[(.*?)\]";
string text = "Hi [Stack], Here is my [Tag] which i need to [Find].";
foreach (Match match in Regex.Matches(text, regex))
{
Console.WriteLine("Found {0}", match.Groups[1].Value);
}
\[([\w]+?)\]
powinno działać. Być może będziesz musiał zmienić pasującą grupę, jeśli chcesz uwzględnić również znaki specjalne.
Działa to nieco ładniej niż obecnie otagowana odpowiedź, ponieważ ma lepszą kontrolę nad takimi rzeczami jak: "Testuj [test] [test [test]" Taktowana odpowiedź będzie zawierać zbłąkane [w meczu, podczas gdy to wyrażenie nie będzie . – StronglyTyped
W zależności od tego, co masz na myśli środowisko:
\[([^\]]+)]
Ah, .NET ... To było wyliczenie Emacsa. :-) –
Myślę, że przegapiłeś ']' nawet w składni Emacsa. – kennytm
Pozwoliłem sobie zmienić go na kompatybilny z .NET. Zauważ, że ']' wymaga jedynie ucieczki w zestawie znaków, a nie poza nim (chociaż nie ucierpiałoby to ...). –
składni .NET, dbanie o wielu wspornikach osadzonych:
\[ ((?: \\. | (?<OPEN> \[) | (?<-OPEN> \]) | [^\]])*? (?(OPEN)(?!))) \]
ten zlicza liczbę otwartych [
sekcjach i tylko w OPEN
powiedzie się, jeśli OPEN
ma wartość 0 na końcu.
Na jakiej platformie? W jakim języku programowania? –
asp.net. Używam Regex.IsMatch() – Ankit
Czy mogą być zagnieżdżone mecze: 'foo [bar [baz]] done' gdzie chcesz pobrać' bar [baz] '? A może 'foo [bar \\] baz] done' gdzie chcesz pobrać' bar] baz'? Czy może istnieć nowa linia (y) pomiędzy '[' a ']'? –