2017-06-13 3 views
1

私はPythonで文字列内の部分文字列を調べます。Pythonの文字列解析、部分文字列エラーをカウントする

string = "aaaaahehabdha" 

x = string.index("he") #5 
y = string.rindex("ha") #11 
z = y - x + 2 #lenght of substring 11 - 5 + 2 = 8 

a = [] 
a.append(string.count("he", x, z)) #1 
a.append(string.count("ha", x, z)) #count only once"ha" but in substring I have 2 x "ha" 
print(a) # [1,1] 

なぜ、「ha」という文字列カウント( "ha"、x、z)が1回だけカウントされるのですか? ありがとうございます。

答えて

0

.countの3番目のパラメータは、長さではなく、非包含的終了インデックスです。 heからhaへの正しい部分文字列を計算し、

z = y + 2 

例、コメントの例を含む:正しいエンドポイントを計算するには

string = "aaaaahehabdha" 
x = string.index("he") 
y = string.rindex("ha") 
z = y + 2 
print('substring:',string[x:z]) 

string = "aaaaahehabdhaaaaaaaaaaa" 
x = string.index("he") 
y = string.rindex("ha") 
z = y + 2 
print('substring:',string[x:z]) 

出力:あなただけカウントするようにしたい場合は

substring: hehabdha 
substring: hehabdha 
+0

と呼ばれている必要があるとき、あなたはから検索したい開始インデックス後z長に保存されているはい、私は知っています。 .... count( "substring"、start、end) –

+0

@ WaterInButtleしかし、終わりのインデックスではなく、長さを計算します。あなたは6,13でなければならないときに開始、6,8の終わりを使用しています。 –

+0

しかし、もし私が "aaaaahehabdhaaaaaaaa"を持っていたら、私はhehabdha部分文字列にしか数えたくない。 –

0

"haの"の量は部分文字列にあり、あなたはstring.count("ha")を使用する必要があり、2を返します。

0

引数xzは、文字列を検索する場所の開始と終了のインデックスですが、開始インデックスは常にインクルーシブで、終了インデックスは常に非包含的です。あなたはあなたが本当に

a.append(string.count("ha", x, y+1)) 
+0

Victorにお返事ありがとうございます。私は以下のようにタイプします:a.append( "ha"、x、string.rindex( "ha")+ 2))これでOKです。 –