У меня есть запрос Regex, который работает, чтобы найти данные:

Соответствует 9-значному числу (не больше, не меньше), причем некоторые разделяются пробелом или - .

(?:\d{9}\s)|(\d{3}[ -]\d{3}[ -]\d{3})

Проблема с результатами заключается в том, что (?:\d{9}\s) возвращает символ пробела, или табуляцию, или новую строку - но это предотвращает возвращение результата из 9 цифр из последовательности из 10 цифр.

Как я могу изменить это, чтобы удалить пробелы в результатах, или просто забрать \d{9} (не возвращая 9 цифр из числа из 10 или более цифр)?

2 ответа2

1

Используйте границу слова:

(?:\d{9}\b)|(\d{3}[ -]\d{3}[ -]\d{3})
//   ___^^

В соответствии с комментарием, OP требуется также слово границы перед:

(?:\b\d{9}\b)|(\d{3}[ -]\d{3}[ -]\d{3})

и, вероятно, для другой части альтернативы:

(?:\b\d{9}\b)|\b(\d{3}[ -]\d{3}[ -]\d{3})\b

Целое регулярное выражение становится:

\b(?:\d{9}|(\d{3}[ -]\d{3}[ -]\d{3}))\b
1

Если вы измените \s на (?=\s) , что является положительным взглядом:

(?:\d{9})(?=\s)

Похоже, это может решить вашу проблему, но я не знаю всех ваших требований.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .