2016-11-23 2 views
0

У меня есть документ, который содержит следующие нумерации пуль:регулярного выражения матча повторяющегося переменного шаблон

PLAN: 

1. Make tea.                                 
2. Make coffe.                              
3. Goto the market. 

Я использую это регулярное выражение \:\s+(\d\.\s+[\w \.]+){1,9}, чтобы захватить и извлечь bulletted списков в файл. Однако он соответствует только первой точке. В листинге может быть от 2 до 7 баллов, я предполагаю, что (\d\.\s+[\w \.]+){1,9} должен позволять соответствовать повторяющимся пунктам, но это не так.

Так как я могу извлечь только маркированный список вышеуказанного формата с использованием регулярного выражения?

+1

См. Https://regex101.com/r/AeNvQA/1. Кроме того, попробуйте ': ((?: \ S * \ d \ .. +) +)' –

+0

С глобальным флагом 'g' ваш фрагмент' (\ d \. \ S + [\ w \.] +) {1, 9} 'отлично работает: [https://regex101.com/r/AeNvQA/3](https://regex101.com/r/AeNvQA/3) без совпадений только с первой пулей. –

ответ

0

Вы можете количественно единую картину пули и обернуть его с внешней захвата группы:

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

Смотрите regex demo

Детали:

  • :\s* - двоеточие, а затем 0+ пробелы
  • ((?:\s*\d+\.\s+.+)+) - Группа 1 захватывая последовательность 1 или более последовательностей:
    • \s* - 0+
    • пробельные символы
    • \d+ - 1+ цифры
    • \. - точка
    • \s+ - 1+
    • пробелы
    • .+ - любые символы 1+, отличные от символов разрыва строки (в зависимости от рецепта регулярного выражения и флаги/модификаторы, которые вы передаете)