2009-07-30 3 views
1

У меня есть ответ:Regex Исключить символ из группы

 
MS1:111980613994 
124 MS2:222980613994124 

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

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

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

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

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

+1

Вы должны указать, что реализация регулярных выражений соответствия вы используете (например, Perl, PCRE, PHP, JavaScript, .Net и т.д.) –

+0

+1 полезный вопрос, спасибо –

ответ

0

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

+0

Если не может это символы новой строки, разбросанные по 15 цифрам. Кроме того, вам действительно не нужно группировать строки в этом случае. –

4

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

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

s = re.sub(r'[\r\n]', '', s) 
1

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

См. «Regular expression to skip character in capture group».

-1

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

+0

Непревзойденные парсеры в шаблоне, FYI. – DWright

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