2017-08-15 52 views
6

Dane:sposób, aby nie zawierać coś w regex grupy przechwytywania

var input = "test <123>"; 

Regex.Matches(input, "<.*?>"); 

Wynik:

<123> 

daje mi wynik chcę ale obejmuje kątowników. Co jest w porządku, ponieważ mogę łatwo wyszukiwać i zamieniać. Zastanawiam się tylko, czy istnieje sposób na uwzględnienie tego w wyrażeniu?

+0

Próbowałaś ' "<(.*?)>"' 'i sprowadzaniu z Grupą? –

Odpowiedz

4

Trzeba użyć grupę przechwytywania:

var input = "test <123>"; 
var results = Regex.Matches(input, "<(.*?)>") 
    .Cast<Match>() 
    .Select(m => m.Groups[1].Value) 
    .ToList(); 

m.Groups[1].Value pozwala uzyskać grupy przechwytywania # 1 wartość.

i lepsze, bardziej efektywne regex może być <([^>]*)> (pasuje <, a następnie dopasowuje i przechwytuje do grupy 1 dowolny zero lub więcej znaków innych niż > a potem po prostu pasuje >). Zobacz regex demo:

enter image description here