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()
'"'
4

1 に答える 1

3

グループで必要なものをキャプチャしていますが、引数なしで呼び出すgroup()と、必要なグループ (グループ 1) ではなく、一致全体 (グループ 0) が返されます。呼び出し.group(1)て、必要なものを含む最初のグループを返します。

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

2番目の質問について*?は、貪欲ではありません。可能な限り一致しません。*ゼロのマッチングを許可するため、可能*?な場合は何もマッチングしません --- 可能です。これは、その後に特定のポイントまで強制的にマッチングさせるものがないためです。その後の引用では、次の引用に一致する場合は可能な限り一致しません。これにより、最後の引用に到達するまでテキストを消費し続けることが強制されます。しかし、引用符がないと、マッチングを続ける理由がまったくないため、何も一致しません。

貪欲でないものを使用すると、実際には二重引用符の後のすべてに一致します --- 二重引用符の後のすべてから行末まで:

>>> re.search(r'\A"(.*)',a).group()
'"abcbc" lol'
于 2013-05-12T23:20:33.150 に答える