2016-10-24 4 views
-1
import re 
x=""" hi i am laughing like hahahahahahaha. and i use it regularly""" 
y=re.compile(r'(ha){1,5}') 
z=y.search(x) 
print z.group() 

haと複数回一致したいと思います。しかし、それは一度だけ一致しています。したがって、上記の私は欲張りな文字列 "ha"を複数回マッチさせたいですが、マッチを1つだけ与えています。

+0

は、あなたが求めているものは不明である - 問題の問題文を含める – techydesigner

+0

'>>>インポート 再>>> X = ""」こんにちは私は私は定期的に使用しています。 " >>> y = re.compile(r '(ha){1,5}' >>> z = y.search(x) >>> print z.group() haha​​hahaha' これは私のpython iの出力ですnterpreter ..あなたのコードは正しいです... –

+0

文字列xで私は7回haを与えました。コードは、私はハだけにプリントを与えている。しかし、私は印刷する必要がある5回したい。私の目標は、7ヘクタールのうち、ハハハハハを印刷することです。コードは1つしか与えません。 –

答えて

1

は期待どおりに動作している:

>>> x=""" hi i am laughing like hahahahahahaha. and i use it regularly""" 
>>> import re 
>>> y=re.compile(r'(ha){1,5}') 
>>> z=y.search(x) 
>>> z.group() 
'hahahahaha' 

あなたは範囲{1,5}にヘクタールを検索するために、あなたの声明で言及し、あなたに5まで貪欲試合最大を与えてきたようにしかし、あなたがしたい場合それは、あなたがこの(+貪欲です)(最大で)

>>> y=re.compile(r'(ha)+') 
>>> z=y.search(x) 
>>> z.group() 
'hahahahahahaha' 
0

re.search発見シングルマッチでそれを達成することができ、すべての発生を一致させます。あなたが一致する文字列のリストを返しre.findall、使用することができます複数の一致を見つけるために:あなたは、文字列ではなく、実際のマッチオブジェクトが必要な場合

import re 

x = """ hi i am laughing like hahahahahahaha. and i use it regularly""" 
y = re.compile(r'(ha)') 
print(y.findall(x)) 

出力を

['ha', 'ha', 'ha', 'ha', 'ha', 'ha', 'ha'] 

あなたはre.finditerを使用することができます。

import re 

x = """ hi i am laughing like hahahahahahaha. and i use it regularly""" 
y = re.compile(r'(ha)') 
for m in y.finditer(x): 
    print(m) 

出力

<_sre.SRE_Match object; span=(23, 25), match='ha'> 
<_sre.SRE_Match object; span=(25, 27), match='ha'> 
<_sre.SRE_Match object; span=(27, 29), match='ha'> 
<_sre.SRE_Match object; span=(29, 31), match='ha'> 
<_sre.SRE_Match object; span=(31, 33), match='ha'> 
<_sre.SRE_Match object; span=(33, 35), match='ha'> 
<_sre.SRE_Match object; span=(35, 37), match='ha'> 

あなたは繰り返しパターンのすべての出現を検索したい場合は、わずかに異なる戦略が必要。これを行う1つの方法は、re.searchを使用し、マッチポイント&のターゲット文字列をもう一度検索して一致が見つからなくなるまで繰り返すことです。

import re 

x = """ hi i am laughing like hahahahahahaha. and i use it regularly""" 
y = re.compile(r'(ha){1,5}') 
patlen = 2 

target = str(x) 
while True: 
    m = y.search(target) 
    if not m: 
     break 
    target = target[patlen + m.start(0):] 
    print(m.group(0)) 

出力

hahahahaha 
hahahahaha 
hahahahaha 
hahahaha 
hahaha 
haha 
ha 
関連する問題