2016-01-19 2 views
2

Сейчас у меня есть регулярное выражение, как:Match строка с точкой и без

([1-9]{0,9}m - [0-9]{0,9}m)

который соответствует фразы типа 1m - 5m, 7m - 17m и т.д.

Иногда строка может быть 1.5m - 5m.

Как я могу сопоставить такие строки?

+2

Для сопоставления числа с поплавком используйте '[0-9] + (\. [0-9] +)?' – Tushar

+0

@Jonuux Вы действительно хотели использовать '[1-9] {0,9} M'? Вы хотите, чтобы он соответствовал «m» (не число), но не '10m'? – Biffen

ответ

2

Вы можете добавить дополнительный дробную часть с (?:\.\d+)?:

([1-9]{0,9}(?:\.\d+)?m\h*-\h*\d{0,9}(?:\.\d+)?m) 

См regex demo

Если первое число может быть любым, замените [1-9] с \d.

(?:\.\d+)?означает матч буквальной точку с последующей одной или более цифрами один или ноль (?) раз.

\h* соответствует нулю или более горизонтальным пробелам.

Детали:

  • [1-9]{0,9} - от 0 до 9 цифр от 1 до 9 диапазона (заменить \d, чтобы соответствовать любые цифры)
  • (?:\.\d+)? - необязательный дробная часть
  • m - буквальный m
  • \h* - ноль или более горизонтальных пробелов
  • - - буквальный дефис
  • \h* - ноль или более горизонтальные пробельные
  • \d{0,9} - любая цифра, от 0 до 9 вхождения
  • (?:\.\d+)?m - смотрите выше.

Если вы планируете, чтобы предотвратить соответствие ведущих нулей в цифрах, но принимает строки, как 101m - 5m, вы можете захотеть использовать

((?!0)\d{0,9}(?:\.\d+)?m\h*-\h*\d{0,9}(?:\.\d+)?m) 
^^^^^ 

См another regex demo. Взгляд просто ограничит общий \d, чтобы он не начинался с 0.

2

Вы можете попробовать это.

\d+(\.\d+){0,1}m\s-\s\d+(\.\d+){0,1}m

  • номер с . после того, как должно быть digits.so подумал, что together.But оно должно быть один или ZERO.so ...
Смежные вопросы