Сопоставление регулярных выражений и удаление пробелов

#regex #match

Вопрос:

Пожалуйста, как я могу получить адрес с помощью регулярного выражения:

Адрес 123 Улица Мэра, филиал ЛАГ ABC

используется (?<=Address(s))(.*(?=s)) , но включает пробелы после «Адреса». Пытаюсь получить выражение, которое извлекает адрес без пробелов. (После «Адреса» перед «123»есть несколько пробелов)

Спасибо!

Комментарии:

1. Значение без пробела находится в группе 2

2. Ваше регулярное выражение уже выглядит правильным…?

3. Каковы требования к шаблону? Откуда ты знаешь, что нам нужно остановиться раньше Branch ABC и не только ABC ? Вы указали только левую границу, Address пробелы после нее. Кроме того, какой язык программирования/инструмент вы используете? Пожалуйста, поделитесь своей соответствующей частью кода, показывающей, как вы используете регулярное выражение.

4. @Thefourthbird в результате, который я получаю, есть пробелы перед 123

5. @Thefourthbird, я верю, что вы можете ответить на этот вопрос.

Ответ №1:

Шаблон (?<=Address(s))(.*(?=s)) , который вы попробовали, утверждает адрес, за которым следует один символ пробела слева, а затем соответствует остальной части строки, утверждающей символ пробела справа.

Для примера данных, которые будут совпадать непосредственно перед последним символом пробела в строке, и совпадение также будет содержать все символы пробела, которые присутствуют сразу после Address


Один из вариантов сопоставления выделенных жирным шрифтом частей в вопросе заключается в использовании группы захвата.

 bAddresss ([^,] ,s*S )
 

Шаблон совпадает:

  • bAddresss Адрес соответствия, за которым следуют символы пробелов 1
  • ( Группа захвата 1
    • [^,] , Сопоставьте 1 вхождений любого символа, за исключением , , а затем сопоставьте ,
  • s*S Сопоставьте необязательные символы пробелов, за которыми следуют символы без пробелов 1
  • ) Близкая группа 1

Демонстрация регулярных выражений .NET (нажмите на вкладку Таблица, чтобы увидеть значение для группы 1)

Обратите внимание, что s и [^,] также может соответствовать новой строке

Вариант с положительным внешним видом, чтобы получить только совпадение:

 (?<=bAddresss )[^,s][^,] ,s*S 
 

<a rel=»noreferrer noopener nofollow» href=»https:///regexstorm.net/tester?p=(?Демонстрация регулярных выражений .NET