Regex pasuje do jednego z dwóch słów

301

Mam dane wejściowe, które mogą mieć tylko 2 wartości applelub banana. Jakiego wyrażenia regularnego mogę użyć, aby upewnić się, że któreś z dwóch słów zostało przesłane?

CyberJunkie
źródło
2
W jakim języku / środowisku ten regex jest wdrażany? Regex wydaje się niepotrzebnym narzutem w wielu sytuacjach.
mickmackusa

Odpowiedzi:

467

To wystarczy:

/^(apple|banana)$/

do wykluczenia z przechwyconych ciągi (np $1, $2):

(?:apple|banana)
flogratos
źródło
43
Dla niektórych przydatne będzie użycie tego jako grupy nie przechwytującej. Korzystanie (?:apple|banna)dopasuje albo, ale nie doda je do listy przechwyconych ciągi (np $1, $2.. $N).
doub1ejack,
Cześć, szybkie pytanie, co powinienem zrobić, jeśli nie chcę, aby applebanana pasowała?
Grover Reyes
Wyrażenie powyżej pasuje do jabłka i banana, ale nie pasuje do applebanana.
phlogratos
99

Istnieją różne silniki wyrażeń regularnych, ale myślę, że większość z nich będzie działać z tym:

apple|banana
smoak
źródło
55
Jeśli planujesz umieścić więcej w regex, musisz umieścić nawiasy wokół słów, tak: (apple|banana).
Brian J
ale jak sprawić, by wielkość liter nie była uwzględniana?
Nitish
To jest ustawione z re.IGNORECASEflagą. Np .:re.compile("(apple|banana)", re.IGNORECASE)
Troels Ynddal
-8

Wyrażenie regularne /.txt|.tif/może być użyte w SiteScope do zlokalizowania „dopasowania nazwy pliku” dla monitora katalogu podczas wyszukiwania dwóch różnych typów plików - plików z rozszerzeniem .txt lub .tif

Bogini witryny
źródło