Регулярное выражение для извлечения цифр в строке не в виде слова и не разделенных символом?

#regex #search

#регулярное выражение #Поиск

Вопрос:

Я хочу извлечь идентификатор из поискового запроса, но я не знаю длину идентификатора.

Из этого ввода я хочу получить числа, которых нет в словах, и числа, которые не разделены символами.

 12 11231390 good123e41 12he12o1 1391389 dajue1290a 12331 12-10 1.2 test12.0why 12 12 12*6 2d1139013 09`29 83919 1
 

Сюда я хочу вернуться

 12 11231390 1391389 12331 83919 1
 

До сих пор я пытался /b[^D]d*[^D]b/gm , но я получаю цифры между символами и не получаю 1 в конце.

Ответ №1:

Вы можете многократно сопоставлять цифры между пробелами. Использование границы слова b даст вам частичные совпадения.

Обратите внимание, что [^D] это то же самое, что d и ожидаемый хотя бы один символ.

Ваш шаблон может быть записан как bdd*db , и вы можете видеть, что вы не получаете 1 в конце, поскольку ваш шаблон соответствует как минимум 2 цифрам.

 (?<!S)d (?:s d )*(?!S)
 

Шаблон соответствует:

  • (?<!S) Отрицание поиска назад, утверждение границы пробела слева
  • d (?:s d )* Сопоставьте 1 цифры и, при необходимости, повторите сопоставление символов 1 пробелов и 1 цифр.
  • (?!S) Отрицательный прогноз, установите границу пробела справа

Демонстрация регулярных выражений

Если поисковые запросы не поддерживаются, вы можете использовать сопоставление с группой захвата

 (?:^|s)(d (?:s d )*)(?:$|s)
 

Демонстрация регулярных выражений