2014-08-21 3 views
-1

Что означает ?: при использовании 'или' в регулярном выражении python?"?: Сочетание символов в python regex

например

(?:^|\n) делает захват матч, скажем, следующий текст

sample text sample text\nsample text sample text 

но (^|\n) не делает.

В чем причина этого?

+0

'(^ | \ n)' захватывает начало или символ новой строки. http://regex101.com/r/gL7lH7/2 –

+1

Вы проверили [документацию] (https://docs.python.org/2/library/re.html)? Там все объяснено, и быстрый поиск нашел бы его. – user2357112

ответ

4

(?: не является группа записи

(?:      group, but do not capture: 
    ^      the beginning of the string 
    |      OR 
    \n      '\n' (newline) 
)      end of grouping 

взглянуть на online demo

Подробнее о Capturing

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

Другими словами

(?:^|\n) Non-capturing group 

1st Alternative:^
    ^assert position at start of the string 
2nd Alternative: \n 
    \n matches a fine-feed (newline) character (ASCII 10) 
2

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

>>> s = "sample text sample text\nsample text sample text" 
>>> print s 
sample text sample text 
sample text sample text 
>>> import re 
>>> m = re.findall(r'(?:^|\n)', s, re.M) // In this re.findall function prints the matched characters(ie, two starts and a newline character). 
>>> m 
['', '\n', ''] 
>>> m = re.findall(r'(^|\n)', s, re.M) // In this re.findall function prints the captured characters. 
>>> m 
['', '\n', ''] 
Смежные вопросы