私はPython
が初めてで、文字列があります。文字列から数値を抽出したいです。例えば:
str1 = "3158 reviews"
print (re.findall('\d+', str1 ))
出力は['4', '3']
です
リストとしてではなく、できれば整数として3158
のみを取得したい。
filter
は、digitsを使用して文字列をstr.isdigit
メソッドを使用して、
>>> int(filter(str.isdigit, str1))
3158
このコードは正常に機能します。間違いなく他の問題があります:
>>> str1 = "3158 reviews"
>>> print (re.findall('\d+', str1 ))
['3158']
正規表現は正しいようです。変数名を間違えていませんか?上記のコードでは、total_hotel_reviews_string
とstr
を混在させています。
>>> import re
>>> s = "3158 reviews"
>>> print re.findall("\d+", s)
['3158']
形式がそのように単純な場合(スペースが数字を残りの数字から分離します)
int(str1.split()[0])
それをするだろう
IntVar = int("".join(filter(str.isdigit, StringVar)))
文字列から単一の数値を抽出するには、 re.search()
を使用します。これは最初の一致(またはNone
)を返します。
>>> import re
>>> string = '3158 reviews'
>>> int(re.search(r'\d+', string).group(0))
3158
Vishnuの答えからのコードには少し問題があるかもしれません。文字列に数字がない場合、ValueErrorを返します。これを避けるための私の提案があります:
>>> digit = lambda x: int(filter(str.isdigit, x) or 0)
>>> digit('3158 reviews')
3158
>>> digit('reviews')
0
a = []
line = "abcd 3455 ijkl 56.78 ij"
for Word in line.split():
try:
a.append(float(Word))
except ValueError:
pass
print(a)
出力
3455.0 56.78
私の答えは追加のライブラリを必要とせず、理解するのは簡単です。しかし、文字列内に複数の数字がある場合、私のコードはそれらを一緒に連結することに注意する必要があります。
def Search_number_String(String):
index_list = []
del index_list[:]
for i, x in enumerate(String):
if x.isdigit() == True:
index_list.append(i)
start = index_list[0]
end = index_list[-1] + 1
number = String[start:end]
return number
私はコーディングの初心者です。これは質問に答える私の試みです。ライブラリをインポートせずにPython3.7バージョンを使用しました。
このコードは、空白(単語)で区切られた文字セットで構成される文字列から10進数を抽出して返します。
注意:複数の数値がある場合、最後の値を返します。
line = input ('Please enter your string ')
for Word in line.split():
try:
a=float(Word)
print (a)
except ValueError:
pass
上記のソリューションは整数を想定しているようです。以下は、小数を許可するための小さな変更です。
num = float("".join(filter(lambda d: str.isdigit(d) or d == '.', inputString)
(-記号を考慮せず、英語のピリオドだけでなく、ピリオドが数字文字列に適切に配置されていることを前提としています。それは破壊できないように構築されていませんが、私のデータケースで機能しました。)