2013-05-12 2 views
1

Это только для целей обучения, у меня есть следующий код. что, если я хочу извлечь только 'abcbc' без двойной кавычки? я также пробовал re.search(r'\A\"(.*?)\"',a).group() с учетом изменения.извлечение строки внутри строки без двойной кавычки

>>> a = "\"abcbc\" lol" 
>>> re.search(r'\A"(.*?)"',a).group() 
'"abcbc"' 

также, если изменить шаблон, чтобы '\A"(.*?)' это нужно просто вернуть все после того, как двойные кавычки? но он дает следующее. Я что-то не так?

>>> re.search(r'\A"(.*?)',a).group() 
'"' 

ответ

3

Вы захватываете то, что вы хотите в группе, но по телефону group() без аргументов, вы возвращаете весь матч (группа 0), а не группа, которую вы хотите (что является группа 1). Вызовите .group(1), чтобы вернуть первую группу, которая имеет то, что вы хотите.

>>> a = "\"abcbc\" lol" 
>>> re.search(r'\A"(.*?)"',a).group(1) 
'abcbc' 

Что касается вашего второго вопроса, то *? является не жадный: он будет соответствовать как мало, как это возможно. Поскольку * позволяет совместить нуль, *? ничего не будет соответствовать, если это возможно, и это возможно, так как после этого у вас нет ничего, чтобы заставить его соответствовать определенной точке. При цитировании после него он будет соответствовать как можно меньше, если он будет соответствовать следующей цитате, что заставляет его продолжать употреблять текст, пока не достигнет закрытой цитаты. Но без цитаты он просто ничего не соответствует, так как у него нет причин продолжать сопоставление вообще.

Если использовать не жадный, то он будет действительно соответствовать все после того, как двойные кавычки --- все после двойной кавычки, до конца строки:

>>> re.search(r'\A"(.*)',a).group() 
'"abcbc" lol' 
+0

я думаю, что ' \ A "([^"] *) 'также будет делать это (' group (1) '), конечно. – gillyspy

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