2015-12-17 3 views
1

У меня есть следующая таблица содержания и разделы в моем файле:Как исключить строки с ... в регулярном выражении

1.2 Purpose .................... 8 
1.3 System Overview ............ 8 
1.4 Document Overview .......... 8 
1.5 Definitions and Acronyms ......... 9 
2.1.3.3.8 FOO 
2.1.3.3.9 BAR 
2.1.4 TEST 

я хотел бы, чтобы извлечь имена разделов и игнорировать строки, которые являются частью оглавления.

Я пытался это регулярное выражение:

^((?:\d{1,2}\.)+(?:\d{1,2})+)\s.+(?!\.\.\.).*$ 

Однако я продолжаю захватывая оглавления линий.

Как я могу исключить строки с ... строками?

Спасибо!

+0

Это строка за строкой. Я хотел бы, чтобы \ 1 содержал номера разделов из строк без ТОС. –

+0

Не имеют ли названия разделов '...'? – Jan

+0

Нет. Они этого не делают. Только линии TOC. –

ответ

3

Проблема заключалась в том, что вы были исключены только . s в очень определенном месте; исключенной матч опережения не выходили за рамки позиции, которую он был помещен в Рассмотрим вместо:.

^(\d{1,2}(?:\.\d{1,2})*)\s*[^.]*(?!.*\.{3}).*$ 
#         ^^ 

... символы с морковью под ними имеют решающее значение: Они делают отрицательный предпросмотр применять не только в этой конкретной но и в любом месте после него.

+0

Это сделало. Спасибо! –

+2

Это, по-моему, немного легче для движка: ['^ (\ d {1,2} (?: \. \ D {1,2}) *) \ s * (?!. * \. {3}). * $ '] (https://regex101.com/r/mP4lZ6/1). –

+0

@stribizhev, хороший вызов - лучше использовать любые пробелы, доступные для потребления, прежде чем принимать отрицательное утверждение; фактически, может поглощать любое непериодическое содержание из рассмотрения таким же образом. –

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