2016-02-18 3 views
5

Я боюсь с регулярным выражением, чтобы остановиться в конце строки.Regex: не соответствует концу строки

ввода выглядит следующим образом:

How text spacing looks in Notepad++

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

В строках 2 и 4 следующая работа (т.е. матч 12 и 16 соответственно):

Pink\s*:\s*(.*)\n 
Red\s*:\s*(.*)\n 

Но для линии 3 (где нет никакого значения, чтобы соответствовать), регулярное выражение с использованием вышеуказанного синтаксиса возвращает 16 , т.е. читается за пределами строки.

Может ли кто-нибудь предположить, что я делаю неправильно? Я использую VBA.

+0

Только что заметил дополнительный двоеточие до 16 в примере, так что это на самом деле: 16, который возвращается, но это не относится к вопросу. – QAer

+0

Вам нужно заменить '\ s' на' [\ t] '. Или с '[^ \ S \ r \ n]'. –

ответ

3

Проблема в том, что класс \s сокращенного символа соответствует как вертикальным, так и горизонтальным пробелам. То есть он соответствует как пробелам, так и последовательностям новой строки.

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

Необходимо заменить \s на [ \t] или с [^\S\r\n\v].

+2

Удивительно, спасибо за это объяснение и решение. – QAer

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