Czy istnieje sposób sprawdzenia, czy wiersz zawiera wyrazy pasujące do zestawu wzorca regex? Jeśli mam [regex1, regex2, regex3]
i chcę sprawdzić, czy linia pasuje do którejkolwiek z nich, w jaki sposób mogę to zrobić? W tej chwili używam re.findall(regex1, line)
, ale dopasowuje tylko 1 wyrażenie regularne na raz.Dopasowywanie wiersza za pomocą wielu wyrażeń regularnych za pomocą języka Python
Odpowiedz
Możesz użyć wbudowanych funkcji, jeśli wszystkie wyrażenia regularne muszą się zgadzać) i wyrażenia Generatora, aby przeglądać wszystkie obiekty regex.
any (regex.match(line) for regex in [regex1, regex2, regex3])
(lub any(re.match(regex_str, line) for regex in [regex_str1, regex_str2, regex_str2])
jeśli Wyrażenia regularne nie są wstępnie skompilowane regex obiektów, oczywiście)
Mimo, że będzie ineficient porównaniu do łączenia swoich regexes w jednym wyrażeniu - jeśli ten kod jest czas lub procesora krytycznego, powinieneś spróbować, tworząc pojedyncze wyrażenie regularne, które obejmuje wszystkie twoje potrzeby, używając specjalnego operatora regex |
do oddzielania oryginalnych wyrażeń. w prosty sposób połączyć wszystkie regexs jest użycie znaków „join” operator:
re.match("|".join([regex_str1, regex_str2, regex_str2]) , line)
Chociaż łączenie regexes w tej formie może doprowadzić do niewłaściwych wyrażeń czy oryginalne już robią używania Operator |
.
Wypróbuj nowe wyrażenie: (regex1) | (regex2) | (regex3). Spowoduje to dopasowanie linii do któregokolwiek z 3 wyrażeń regularnych w tym wierszu.
'(?: ...)' jest prawdopodobnie lepszym pomysłem niż '(...)' tutaj, aby uniknąć tworzenia fałszywych grup przechwytywania. –
@Karl ... chyba że chcesz sprawdzić prawidłowość '.group (n)', aby określić * którą * grupę przechwyciłeś. –
Pętli przez elementy regex i wyszukiwania.
regexList = [regex1, regex2, regex3]
line = 'line of data'
gotMatch = False
for regex in regexList:
s = re.search(regex,line)
if s:
gotMatch = True
break
if gotMatch:
doSomething()
- 1. Dopasowywanie przedniego ukośnika za pomocą wyrażeń regularnych
- 2. Dopasowywanie listy rosnących liczb całkowitych za pomocą wyrażeń regularnych
- 3. Dopasuj tekst wielowierszowy za pomocą wyrażeń regularnych
- 4. Zastąpienie za pomocą wielu wyrażeń regularnych lub większego w Pythonie
- 5. Porównywanie dwóch dokumentów za pomocą wyrażeń regularnych
- 6. Naprawianie nazw ulic za pomocą wyrażeń regularnych
- 7. Negacja ciągu za pomocą wyrażeń regularnych
- 8. Wyszukiwanie ciągów za pomocą wyrażeń regularnych w języku Python
- 9. Wyodrębnianie danych za pomocą wyrażeń regularnych w języku Python
- 10. Dopasowywanie^n b^n c^n (na przykład "aaabbbccc") za pomocą wyrażeń regularnych w języku C#
- 11. Numer linii za pomocą wyrażeń regularnych w Notepad ++?
- 12. Wizualizacja modelu LDA za pomocą języka Python
- 13. Python - Sprawdzanie poprawności za pomocą wielu schematów za pomocą lxml
- 14. możemy sprawdzić wiele wzorców za pomocą wyrażeń regularnych w java?
- 15. Tagi autouzupełniania szyn rozdzielone przecinkami za pomocą wyrażeń regularnych
- 16. Wyodrębnianie danych Java za pomocą wyrażeń regularnych między znacznikami href
- 17. jak dopasować koniec ciągów za pomocą wyrażeń regularnych w java
- 18. Wyodrębnianie podłańcuchów za pomocą wyrażeń regularnych w zwykłym bashu
- 19. Znajdź i zastąp w bash za pomocą wyrażeń regularnych
- 20. Wyodrębnij wartość parametru z adresu URL za pomocą wyrażeń regularnych.
- 21. Zastąp przecinek w nawiasach za pomocą wyrażeń regularnych w java
- 22. Jak przekonwertować łącza stylu Markdown za pomocą wyrażeń regularnych?
- 23. Wyodrębnij dane między znakami za pomocą wyrażeń regularnych?
- 24. Znajdowanie wszystkich wystąpień naprzemiennych cyfr za pomocą wyrażeń regularnych
- 25. Jak grupować wyszukiwanie wyrażeń regularnych za pomocą swift
- 26. Jak negować test za pomocą wyrażeń regularnych w skrypcie bash?
- 27. Jak dopasować liczbę w nawiasach kwadratowych za pomocą wyrażeń regularnych
- 28. PHP: usuń dodatkową przestrzeń z ciągu za pomocą wyrażeń regularnych
- 29. Jak sparsować przetwarzanie symbolu stopnia (Unicode) za pomocą wyrażeń regularnych?
- 30. Zastępowanie liczb w łańcuchu za pomocą wyrażeń regularnych w javascript
Możesz spowodować, że metoda łączenia będzie mniej podatna na niepowodzenie, jeśli zawiniesz każde wyrażenie w nawiasach. ''(' + ') | ('. join (['foo', 'bar', 'baz']) + ')' 'daje'' (foo) | (bar) | (baz) ''. – FakeRainBrigand
Jeszcze lepiej, owinąć '(?: ...)' i połączyć łańcuch w sposób, który podkreśla jego logiczną strukturę. ''|' .join ('(?: {0})'. format (x) dla xw (" foo "," bar "," baz "))' na przykład. –
Pracowałem dla mnie .... Dzięki – Prateek