5

次のコードは非常に奇妙です。

 >>> words = "4324324 blahblah"
 >>> print re.findall(r'(\s)\w+', words)
 [' ']
 >>> print re.search(r'(\s)\w+', words).group()
 blahblah

()オペレーターは、findallの動作が悪いようです。どうしてこれなの?csvファイルに必要です。

blahblahわかりやすくするために編集: findall を使用して表示したい。

私はそれが私が望むことをすることを発見しre.findall(r'\s(\w+)', words)ましたが、findallがこのようにグループを扱う理由がわかりません.

4

2 に答える 2

7

1 文字オフ:

>>> print re.search(r'(\s)\w+', words).groups()
(' ',)
>>> print re.search(r'(\s)\w+', words).group(1)
' '

findallキャプチャされたすべてのグループのリストを返します。それがあなたがキャプチャするものであるため、スペースを取り戻しています。キャプチャを停止すると、正常に動作します。

>>> print re.findall(r'\s\w+', words)
[' blahblah']

csvモジュールを使用する

于 2012-12-14T23:16:32.370 に答える
6

キャプチャ グループを正規表現に保持したいが、グループではなく各一致の内容全体を検索したい場合は、次を使用できます。

[m.group() for m in re.finditer(r'(\s)\w+', words)]

例えば:

>>> [m.group() for m in re.finditer(r'(\s)\w+', '4324324 blahblah')]
[' blahblah']
于 2012-12-14T23:59:13.697 に答える