2016-11-07 10 views
-2

ArcGISでフィールド計算機を使用して文字列から数値を抽出して新しいフィールドを作成する際に問題が発生しています。抽出される値は文字列のままでなければなりません。私が抱えている問題は、抽出したい数字に続く文字の数に一貫性がないことです。文字列内に唯一の一貫性があるのは、目的の番号に続くコンマです。次のようにforおよびwhileループで文字列の一部を抽出する

は、これまでのところ、私のコードは次のとおりです。

def get_num_from_string(string): 
    num = '' 
    for i in string: 
     if i in '1234567890': 
      num+=i 
    return num 

このコードは、私は文字列の各文字をステップとコンマに到達するまで、数字だけを返すようにコードを必要とする私の目標を達成する上で失敗しました。たとえば、元の文字列が "River Lot 489、11756 MB CODE"の場合、出力文字列に "489"を読みたいとします。

+0

のテスト? [mcve]を与える。 – jonrsharpe

+0

whileループが文字列内の有限長の文字を繰り返し処理するのに適していると思われる理由が分かりません –

+0

申し訳ありませんが、私は初心者のPythonユーザーです。私が意味することは、@ jonrsharpeには、元のデータから抽出しようとしている数字の後に来るデータ内の数字があるということです。たとえば : 「川ロット489、127756メガバイトのCODE」 は、私は私の出力は、単に本当に最初のPythonの問題ではない 「489」 – Husters

答えて

1

は、単にあなたはそれがリストの代わりに再び文字列になりたい場合は、joinを使用

>>>> print([d for d in test if d.isdigit()]) 
['1', '2', '3', '4', '0'] 
>>>> 

を行い、あなたは文字列内のすべての数字を取得するには文字列

test = "12hel34l0" 

があるとし

>>>> print(''.join([d for d in test if d.isdigit()])) 
12340 
>>>> 

編集

「川ロット489、127756メガバイトのCODEは」私は私の出力は、単にこれを一致させるには「489」

になりたい、私は単にtest.split(",")[0]に次のメソッドを変更します。あなたのデータがどのように見えるか、そしてのたびにの最初のカンマの前に数字を取得する必要があるかどうかについて、より多くの情報を提供する必要があります。

あなたの方法で実装されています。

def get_num_from_string(string): 
    return ''.join([d for d in test.split(",")[0] if d.isdigit()]) 

*「私の希望のものに従う数字、私に間違った値を与える」*は正確に何を意味し、あなたの提供例

>>>> test = "River Lot 489, 127756 MB CODE" 
>>>> print(get_num_from_string(test)) 
489 
関連する問題