2013-01-22 14 views
9

Potrzebuję znaleźć linie, które zawierają więcej niż 10 "," (Mam błędy importowania CSV, więc muszę poprawić ręcznie). Używam Notepad ++, więc nie muszę pisać ponownie, aby dopasować linię, tylko by dopasować coma.Wyrażenie regularne pasujące do tekstu zawierającego n lub więcej określonego znaku

(.*,.*){11,100} //does not work 
+0

Czy możesz wyjaśnić, co masz na myśli przez "nie działa"? Twój regex powinien znajdować linie z więcej niż 10 przecinkami, nawet jeśli chodzi o działalność w bardzo skomplikowany sposób. –

Odpowiedz

12

.* również dopasowuje przecinki. Trzeba wykluczyć te z zanegowanej klasy postaci ([^,] dopasowuje dowolny znak wyjątkiem przecinki):

^[^,\r\n]*(?:,[^,\r\n]*){11,}$ 

I dodanych \r\n do klasy znaku lub będzie on pasował do całej nowej linii.

Pamiętaj jednak, że będzie to również uwzględniało przecinki zawarte w cudzysłowach, więc jeśli je posiadasz, błędnie ocenisz liczbę pól w wierszu CSV.

2

Zakładając Notepad ++ w wersji 6+ (która używa biblioteki regularnych zgodnych z Perl zgodną z PCRE) oraz że ". mecze przełamane "pole nie jest zaznaczone w oknie znajdują się:

(.*?,){11,}

Jeśli linia zawiera więcej niż 10 przecinki, to pasuje od początku wiersza do ostatniego przecinka.

(.*?,) dopasowuje dowolny znak, z wyjątkiem znaku nowej linii, tak wiele razy, jak to możliwe, aż do następnego znaku jest przecinek; {11,} oznacza 11 lub więcej razy.

Jeśli chcesz, aby wyrażenie regularne działało, niezależnie od tego, czy ". mecze przełamane 'pole jest zaznaczone, można użyć:

([^\n]*?,){11,} 

Twój regex działa jeśli' . pasuje do newline 'pole nie jest zaznaczone, ale ponieważ pasuje do dowolnego znaku chciwie, może być tak olbrzymia liczba potencjalnych meczów, że może wydawać się, że zawiesi aplikację. Dodanie ? po .*, tak aby wieloznacznik pasował do leniwie lub niechętnie, tj. Jak kilka razy, jak to możliwe, powinien rozwiązać problem.

PCRE man pages
Perl Regular Expressions documentation - zalecane.
Notepad++ "outdated" regular expressions tutorial

Powiązane problemy