Вы захватываете то, что вы хотите в группе, но по телефону group()
без аргументов, вы возвращаете весь матч (группа 0), а не группа, которую вы хотите (что является группа 1). Вызовите .group(1)
, чтобы вернуть первую группу, которая имеет то, что вы хотите.
>>> a = "\"abcbc\" lol"
>>> re.search(r'\A"(.*?)"',a).group(1)
'abcbc'
Что касается вашего второго вопроса, то *?
является не жадный: он будет соответствовать как мало, как это возможно. Поскольку *
позволяет совместить нуль, *?
ничего не будет соответствовать, если это возможно, и это возможно, так как после этого у вас нет ничего, чтобы заставить его соответствовать определенной точке. При цитировании после него он будет соответствовать как можно меньше, если он будет соответствовать следующей цитате, что заставляет его продолжать употреблять текст, пока не достигнет закрытой цитаты. Но без цитаты он просто ничего не соответствует, так как у него нет причин продолжать сопоставление вообще.
Если использовать не жадный, то он будет действительно соответствовать все после того, как двойные кавычки --- все после двойной кавычки, до конца строки:
>>> re.search(r'\A"(.*)',a).group()
'"abcbc" lol'
я думаю, что ' \ A "([^"] *) 'также будет делать это (' group (1) '), конечно. – gillyspy