2017-07-02 8 views
0

文字列"abajaao1grg100rgegege"の整数の数を計算したいと思います。 私はisnumeric()を使ってみましたが、 '100'は3つの異なる整数とみなされ、出力4が表示されます。私のプログラムでは、100を単一の整数として扱います。Python文字列内の整数の数を計算するには

T = int(input()) 
for x in range(T): 
    S = input() 
    m = 0 
    for k in S: 
     if (k.isnumeric()): 
      m += 1 
print(m) 
+0

は、以前の文字が数字なかった場合にのみ、カウンターを増やしますか? – idjaw

+2

@ idjawの言葉で言えば:_あなたの解決策を私に見せてもらうと、私はあなたに私を見せてくれるでしょう。 –

答えて

1

は、あなたがこの問題を解決するための正規表現ライブラリを使用することができます。

は、ここに私の試みです。

import re 
st = "abajaao1grg100rgegege" 
res = re.findall(r'\d+', st) 

>>> ['1', '100'] 

リストにある数字のうち、findallが返す数字の数を確認できます。 Pythonの正規表現とパターンの詳細を読むためには

print (len(res)) 
>>> 2 

here

2

私は、一致の数を数える非常に基本的な正規表現(\d+)を使用したい入力します。

import re 

string = 'abajaao1grg100rgegege' 
print(len(re.findall(r'(\d+)', string))) 
# 2 
2

正規表現がされます他の答えが指摘しているように、この種の問題のための道具です。他のものよりはるかに明確にも正規表現を使用しないこと、

result = sum(y.isdigit() and not x.isdigit() for x,y in zip(myString[1:], myString)) 

はまた、ここでは理解しやすいです、反復解法と次のとおりです。ただし、ここではループ構造となし、正規表現を使用するソリューションですだけでなく、より詳細な:

def getNumbers(string): 
    result = 0 
    for i in range(len(string)): 
     if string[i].isdigit() and (i==0 or not string[i-1].isdigit()): 
      result += 1 
    return result 
0

非常にPythonはないが、初心者のための、より理解しやすい:string内の文字を超える

ループと各反復was_digit(論理変数)に覚えている中現在の文字が数字の場合 - の場合は次のの繰り返しです。あなたはこの問題を解決しようとするこれまでにしようとしている何

string = 'abajaao1grg100rgegege' 
counter = 0     # Reset the counter 
was_digit = False    # Was previous character a digit? 

for ch in string: 
    if ch.isdigit(): 
     if not was_digit:  # previous character was not a digit ... 
      counter += 1  # ... so it is start of the new number - count it! 
     was_digit = True  # for the next iteration 
    else: 
     was_digit = False  # for the next iteration 

print(counter)    # Will print 2 
0
random="1qq11q1qq121a21ws1ssq1"; 
counter=0 
i=0 
length=len(random) 
while(i<length): 
    if (random[i].isnumeric()): 
    z=i+1 
    counter+=1 
    while(z<length): 
     if (random[z].isnumeric()): 
     z=z+1 
     continue 
     else: 
     break 
    i=z 
    else: 
    i+=1 
print ("No of integers",counter) 
関連する問題