Regex исключить персонажа из группы - PullRequest
2 голосов
/ 31 июля 2009

У меня есть ответ:

MS1:111980613994
124 MS2:222980613994124

У меня есть следующее регулярное выражение:

MS\d:(\d(?:\r?\n?)){15}

Согласно регулярному выражению, часть "(?:\r?\n?)" должна позволять совпадать для группыно исключить его из захвата (поэтому я получаю непрерывное значение из группы).

Проблема в том, что для "MS1:xxx" он соответствует [CR][LF] и включает его в группу.Следует исключить из захвата ...

Помогите пожалуйста.

Ответы [ 4 ]

5 голосов
/ 31 июля 2009

Синтаксис (?:...) не означает, что вложенный шаблон будет исключен из группы захвата, включающей (?:...). Это означает, что группа, образованная (?:...), не будет создавать новую группу захвата. Другими словами, если они заключены в группу захвата, эта группа захвата будет захватывать символы, совпадающие с группой без захвата.

Если вы действительно хотите игнорировать встроенные \r s и \n s, лучше всего удалить их на втором шаге. Вы не говорите, какой язык используете, но что-то эквивалентное этому (Python) должно работать:

s = re.sub(r'[\r\n]', '', s)
1 голос
/ 18 сентября 2009

Насколько я знаю, вам придется использовать 2 регулярных выражения. Один из них «MS \ d: (\ d (?: \ R? \ N?)) {15}», другой используется для удаления разрывов строк из совпадений.

Пожалуйста, обратитесь к " Регулярное выражение для пропуска символа в группе захвата ".

0 голосов
/ 16 августа 2010

Как насчет MS\d:(?:(\d)\r?\n?){15}

0 голосов
/ 31 июля 2009

Возможно, то, что вы хотите сделать здесь, это поместить совпадающую часть [CR] [LF] вне захваченной группы, что-то вроде: MS\d:(\d){15}(?:\r?\n?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...