Подтвердить что ты не робот

ИЛИ в Regex

Скажем, у меня

1 ABC Street
1 A ABC Street

С \d он соответствует 1 (что я ожидаю) с \d \w, он соответствует 1 A (ожидается). Теперь я объединяю шаблон вместе \d|\d \w, он соответствует только первому, но игнорирует второй.

Мой вопрос заключается в том, как правильно использовать или правильно в этом конкретном случае?

PS: Условие обертывает номер только тогда, когда после него нет ни одной буквы, иначе оберните число и одну букву.

Например: 1 ABC-стрит соответствует только номеру 1, но когда 1 A ABC-стрит завершает 1 A

4b9b3361

Ответ 1

Try

\d \w |\d

или добавьте положительный результат, если вы не хотите включать в пробежку пробел

\d \w(?= )|\d

Если у вас есть две альтернативы, где один является расширением другого, сначала поставьте более длинный, иначе он не будет иметь возможности быть сопоставленным.

Ответ 2

Классическое "или" будет | , Например, ab|de будет соответствовать любой стороне выражения.

Тем не менее, для чего-то вроде вашего случая вы можете использовать ? квантификатор, который будет соответствовать предыдущему выражению ровно 0 или 1 раз (предпочтительнее 1 раз; т.е. это "жадное" совпадение). Другой (вероятно, более надежной) альтернативой будет использование пользовательской группы символов:

\d+\s+[A-Z\s]+\s+[A-Z][A-Za-z]+

Этот шаблон будет соответствовать:

  • \d+: одно или несколько чисел.
  • \s+: один или несколько пробелов.
  • [AZ\s]+: один или несколько заглавных или пробельных символов
  • \s+: один или несколько пробелов.
  • [AZ][A-Za-z\s]+: символ в верхнем регистре, за которым следует по крайней мере еще один символ (в верхнем или нижнем регистре) или пробелы.

Если вы хотите более статическую проверку, например, действительно сопоставлять только ABC и A ABC, то вы можете объединить (не совпадающую) группу и определить альтернативы внутри (чтобы ограничить область действия):

\d (?:ABC|A ABC) Street

Или другой вариант с использованием квантификатора:

\d (?:A )?ABC Street

Ответ 3

Я думаю, что вам нужно просто:

\d( \w)?

Обратите внимание, что ваше регулярное выражение тоже сработало бы, если оно было написано как \d \w|\d вместо \d|\d \w.

Это потому, что в вашем случае, когда регулярное выражение соответствует первому варианту, \d, он перестает искать новое совпадение, так сказать.