0

私はこのようなパターンを持っています(3つの単語の略語を見つける)

s='([A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)'

そして見つけたい

line='National Health Service (NHS)'
p=re.findall(s,line)

しかし p は ['Service '] だけであり、文字列全体ではありません。なんで?

4

1 に答える 1

4

一致を正しくグループ化していないので、代わりにこれを使用してください。

s='(?:[A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)'

.findall()キャプチャグループ()を定義しない限り、一致全体を返します。定義する(...)と、代わりにグループに含まれる結果が返されます。上記のパターンでは、代わりに非キャプチャグループを使用しています((?:...))。これにより、キャプチャグループがない状態が表現されるため、.findall()完全一致が再び返されます。

于 2012-09-19T13:53:33.330 に答える