Исключить слова со специальными символами в строке - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь выбрать строку (номер детали), которая имеет структурные цифры {3-5} пробелов {1-4}

e.g. 1234 20 or 1234 20.00

Проблема в том, что мой RegEx захватывает формат строки, например 123412.54 или 1234 12. Я не могу выбрать 1234 12, так как это подстрока 1234 12.54. Если бы основная строка была 1234 12.00, я бы выбрал ее.

Вот RegEx, который я пробовал

(\d\d\d\d?\d?)(\s+|\t)(\d{1,4})

(\d\d\d\d?\d?)(\s+|\t)(\d{1,4}(?!.[1-9])

(\d\d\d\d?\d?)(\s+|\t)(\d{1,4}(?=\.00)?

Ожидаемые результаты - выбрать 1234 20 или 1234 20.00

Не выбирать любую строку, например 1234, 12,54 или даже 1234, 12 (подстрока из 1234, 12,54)

1 Ответ

0 голосов
/ 04 ноября 2019

Вы можете сопоставить 3-5 цифр и использовать чередование для совпадения либо 1-2 цифр с последующей точкой и 1-2 кратных нуля, либо совпадения 1-4 цифр.

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

Примечание , что \s также соответствует \t, а также символ новой строки.

\b\d{3,5}\s+(?:\d{1,2}\.0{1,2}|\d{1,4})(?!\S)

По частям

  • \b Граница слова
  • \d{3,5}\s+ Совпадение 3, 4 или 5 цифр, за которыми следуют 1+ пробелы
  • (?: Группа без захвата
    • \d{1,2}\.0{1,2} Совпадение с 1 или 2 цифрами, точкой и 1 или 2 с нулем
    • | Или
    • \d{1,4} Совпадение 1, 2, 3 или 4 цифр
  • ) Закрыть группу без захвата
  • (?!\S) Отрицательный взгляд вперед, утверждать, что прямо справа нетавтомобиль без пробелов

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...