2015-01-18 2 views
1

Я пытаюсь соответствовать номерам, которые могут появиться в общих постановлениях , такие как:Refining регулярного выражения, чтобы соответствовать что-нибудь после того, как

101.2.23.1 Door Clearances 

У меня есть это регулярное выражение, которое соответствует номерам и несколько точек:

^[.?\d]+$ 

Тем не менее, мне нужно разрешить весь текст, который появляется после этого. Кроме того, это возвращает ложные срабатывания для порядковых списков, таких как 1. 2. 3. 4..

Есть ли способ, которым я могу сопоставить что-либо с минимум тремя номерами в начале и после любого текста?

Вот примеры того, что именно я ожидаю (нет) матча: (. *)

101.1    => true 
101    => false 
1.     => false 
101.1.1 Clearances => true 
+1

Что вы подразумеваете под * возвращает ложные срабатывания для порядковых списков *? – J0e3gan

+1

Я не хотел, чтобы он соответствовал вещам вроде 1. 2. 3. 4. –

ответ

1

Попробуйте это:

^\d{3}\..+$ 

Regular expression visualization

Debuggex Demo (с тестами для всех входов образцов, предоставленных)

Ключевые моменты:

  • ^ - начало строки ввода
  • \d{3}\. - три цифры, за которыми следует период
  • .+ - "любой текст после этого"
  • $ - конец t он входной строки

Обратите внимание, что в исходном шаблоне ^[.?\d]+$, . буквально соответствует . и ? буквально совпадают ?, поскольку эти символы появляются в классе символов (начиная с [ и заканчивая ]) - не то, что вы хотели Я жду.

+1

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

+0

Только что понял, что этот не делает мат. 101.2. Дверные слежки. Извините, я должен был быть более ясным, что это должно быть только 3 цифры в начале с точкой и весь текст после этого необязателен. –

+1

@ johnny5: Я отредактировал свой ответ, чтобы выровнять его с обновленным объяснением. – J0e3gan

1

^(.? \ D +) + \ S $

Первая группа являются один или более пары (последняя точка опционально) и вторая группа соответствует остальное

+1

Да, 3 0) Общий 2) Числа, 3) Текст. Если вы хотите только текст, вы можете сменить группы на не захватывающие (?: \ D +.?) Для первого. –

+0

. Вы правы, это работает лучше всего, но в начале оно не соответствует 3 номерам. –

+0

Вы хотите захватить три числа (1.1.1) плюс текст? Для этого потребуется две группы захвата. Вы хотите ограничить число совпадений только тремя? Можете ли вы привести пример идеального матча? –

Смежные вопросы