Регулярное выражение: удалить любые символы или цифры перед иглой - PullRequest
0 голосов
/ 12 февраля 2019

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

Поскольку всегда неизвестно, как выглядит моя строка, вот несколько распространенных примеров:

  1. 12см iamtext 311
  2. iamtext 311 12 см iamtext 311
  3. iamtext 311 12см

Подытожил: к чему я стремлюсьfor - это число перед cm или cm (пробел).Этот шаблон может отображаться с неопределенным количеством чисел.Так что это может быть что-то вроде 12414 cm.В этом случае я хочу получить 12414.

Но если есть что-то вроде iamtext311 cm Я не хочу ничего возвращать, потому что в этом случае число принадлежит тексту.Но если между числом и текстом есть пробел, я хочу получить 311.

Это то, что я получил до сих пор:

.*?\d+.*?(\d+)

Но это не такработает для символов .. и я не знаю, как обрабатывать в данный момент .. Потому что это такая сложная ситуация, особенно со всеми различными случаями с пробелом и без ...

Буду признателен за любой видпомощи!

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

В вашем шаблоне .*?\d+.*?(\d+) вы не учитываете часть cm.

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

Чтобы cm был частью более длинного слова, вы можете добавить границу слова \b:

(?:^|\s+)(\d+) ?cm\b

regex101 demo

Если вы не хотите сопоставлять символы новой строки, используя \s+, вы можете использовать класс символов для соответствия пробелу и / или табуляции [ \t]

0 голосов
/ 12 февраля 2019

Разделить задачу.

  • Число получается с очевидным \d+.
  • Вы не хотите, чтобы ему предшествовал какой-либо символ, кроме пробелов: (?<!\S).
  • Должен сопровождаться дополнительным пробелом, затем символы cm: (?=\s?cm).

Сложите это вместе: (?<!\S)\d+(?=\s?cm).

Demo .

0 голосов
/ 12 февраля 2019

Как насчет этого с \b с необязательным знаком space?

\b\d+\s?cm\b

DEMO: https://regex101.com/r/fsp3FS/10

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