Użyjemy poniżej wyrażenia regularnego, aby uzyskać cyfry przed słowami.
Przykład:
838123 someWord 8 someWord 12 someWord
(\d+)\s*someWord
Ale czasami wszystko będzie występować między liczbą a słowem. Zobacz poniższy przykładowy wiersz.
Dawny:
43434 z nieco 12 coś z czego 2323 nowy jakoś
Jak uzyskać dokładną cyfrę przed tym słowem za pomocą wyrażenia regularnego?
Proszę o sugestie.
Odpowiedzi:
Zrób to:
(\d+)[^\d]+some[wW]ord
Musisz zaakceptować wszystko inne niż same cyfry. Rozważyłem także oba,
w
aW
ponieważ twoje przykłady zawierały oba.Próbny
źródło
Zakładając, że „cokolwiek” nie zawiera cyfr, możesz użyć tego wyrażenia regularnego:
Demo na regex101
źródło
Jednym z możliwych „przypadków nieudanego narożnika” z odpowiedzi CinCout jest to, czy mecz
someWord
musi być dokładny, np. CzynotsomeWord
isomeWordNotThis
nie powinien być dopasowany.Następujące rozszerzenie tego wyrażenia regularnego umożliwia rozwiązanie tego problemu:
(\d+)[^\d]*[^\w]some[wW]ord[^\w]
Objaśnienie:
[^\w]
przed lub po dopasowującego dlasomeWord
wygląd dla „charakter non-słowo” przed i po nim - koniec linii liczy również tutaj. Można to oczywiście uczynić bardziej złożonym / specyficznym, w zależności od dokładnych wymagań.Próbny
źródło
Możesz spróbować czegoś takiego:
Możesz zobaczyć test tutaj
źródło
Pierwszy rozdzielono
some[wW]ord
,number
ispace
ze wzorem, a następnie uruchomić drugi wzór na jegoPo wykonaniu pierwszego wzoru zdanie będzie zgodne z oczekiwaniami
zmiana:
źródło
Ale czasami wszystko będzie występować między liczbą a słowem. Zobacz poniższy przykładowy wiersz.
Dawny:
Spróbuj tego
Wyjaśnione
Próbny
źródło
Użycie
\s*
spowoduje dopasowanie tylko 0 lub więcej białych znaków.Możesz użyć,
\D+
ale będzie również pasować do nowego wiersza, ponieważ pasuje do dowolnego znaku oprócz cyfry.Jeśli chcesz dopasować cyfry w tym samym wierszu, możesz dodać niezgodne znaki nowej linii do zanegowanej klasy znaków
[^\d\r\n]
W twoim przykładzie używasz
\d
, ale jeśli chcesz dopasować tylko 1 lub więcej cyfr 0–9, możesz użyć klasy postaci[0-9]+
Aby cyfry i słowo nie były częścią większego słowa, możesz skorzystać z jego granic
\b
Jeśli chcesz dopasować słowo bez rozróżniania wielkości liter, możesz użyć
RegexOptions.IgnoreCase
lub wbudowanego modyfikatora(?i)
Zobacz prezentację wyrażenia regularnego .NET
źródło
Użyj nazwanego dopasowania przechwytywania (aby uzyskać wykorzystanie danych
mtch.Groups["Value"].Value
... itd.), Aby wyodrębnić informacje w razie potrzeby.Gdy powyższe zostanie uruchomione ( w
IgnorePatternWhiteSpace
przeciwnym razie usuń komentarze i dołącz do wzorca, aby go uruchomić, np.(?<Value>\d+)(?<Other>.+?)(?<Key>someword)
Bez opcji wyrażeń regularnych ), pobiera dane dla każdej pary danych / kluczy i organizuje je w jednym dopasowaniu.Wynik
Oto wynik (dla twojego drugiego przykładu), które są zawarte w poszczególnych meczach, a ich grupy i przechwyty zapewniają w każdym meczu:
Oto, co jest dopasowane wizualnie:
źródło