Tomasz Dzioba

Tomasz Dzioba wszystkiego po
trochu

Temat: Wyrażenia regularne

Hej.

Potrzebuję pomocy przy zrozumieniu gdzie jest problem. Stworzyłem sobie kodzik, który ma za zadanie pobrać wszystkie cyfry oraz liczby dwu-cyfrowe. Na mój gust regex powinien wyglądać tak: \d{1,2}


List<string> result = new List<string>();
Match m;
//malpka na poczatku pozwala mi uniknac bledu "Unrecognized escape sequence
Regex r = new Regex(@"\d{1,2}");
for (m = r.Match(zrodlo); m.Success; m = m.NextMatch())
{
result.Add(m.Groups[1].ToString());
}


I pech chce, że nie mam pojęcia dlaczego owszem otrzymuję wynik w postaci listy, ale te kilkaset pozycji jest pustych. Jakaś propozycja ?

konto usunięte

Temat: Wyrażenia regularne

Brakuje ci nawiasów grupujących. Dopiero wtedy możesz użyć Groups. Dodatkowo musisz ustawić sobie Word boundary, bo inaczej twój Regex złapie z liczby 122, 12 i będzie sygnalizował że jest poprawny. Poprawny Regex to:
Regex r = new Regex(@"\b(\d{1,2})\b");

\b - ustawia word boundary

Dopisano: Oczywiście jeśli liczby masz poprzedzielane białymi znakami, ale tego nie wiem bo nie pokazałeś co się znajduje w zmiennej zrodlo.Paweł Łukasik edytował(a) ten post dnia 07.07.09 o godzinie 21:07

konto usunięte

Temat: Wyrażenia regularne

Jeśli będziesz pisał bardziej zaawansowane regex-y to pomocne może okazać się narzędzie na stronie:
http://www.fileformat.info/tool/regex.htm

Tester regexow online - bardziej pod Jave co prawda, ale skuteczny.Piotr Jędrkowiak edytował(a) ten post dnia 08.07.09 o godzinie 21:19

konto usunięte

Temat: Wyrażenia regularne

Piotr Jędrkowiak:
Tester regexow online - bardziej pod Jave co prawda, ale skuteczny.Piotr Jędrkowiak edytował(a) ten post dnia 08.07.09 o godzinie 21:19

Jeśli pod Javę to warto poszukać specyficznego pod .NET. Zapewne w 99% przypadków wynik będzie ten sam, to dla 1% można bezskutecznie szukać błędu w naszym Regex'ie o okaże się, że leży on w ciut innej interpretacji tychże.

konto usunięte

Temat: Wyrażenia regularne

http://regexlib.com/

Tester .NET | ClientSide (JS) :) Plus biblioteka gotowcow.

konto usunięte

Temat: Wyrażenia regularne

Ja do testowania używam Regex Coacha.

http://weitz.de/regex-coach/Jarek D. edytował(a) ten post dnia 08.07.09 o godzinie 22:08

konto usunięte

Temat: Wyrażenia regularne

Nie powinno być przypadkiem
result.Add(m.Groups[0].Value);
?

O ile ToString() i Value w tym wypadku prawdopodobnie zwracają to samo, to [1] wydaje się podejrzane ;)Maciej O. edytował(a) ten post dnia 08.07.09 o godzinie 22:53

konto usunięte

Temat: Wyrażenia regularne

Maciej O.:
Nie powinno być przypadkiem
result.Add(m.Groups[0].Value);
?

W tym przypadku jest to to samo. W ogólnym Groups[0] zawiera cały dopasowany string. Groups[1] pierwszą grupę. Dla przykładu dla Regex'a
ab(\d{1,2})

i źródła - ab12
Groups[0] będzie miało ab12 a Groups[1] - 12.

Edit: Właśnie sobie uświadomiłem, że można właśnie w użyć indeksu 0 i nie bawić się w grupowanie (ale nadal trzeba użyć Word boundary), ale chyba lepiej jawnie pokazać, że chcemy się stworzyć grupę z tych elementów i potem je odczytać. A przynajmniej tak dla mnie jest jaśniej, jak później musiałbym taki kod czytać.Paweł Łukasik edytował(a) ten post dnia 08.07.09 o godzinie 23:57

Następna dyskusja:

Wyrażenia regularne




Wyślij zaproszenie do