web-dev-qa-db-ja.com

文字列から数字以外の文字を削除する

テキストファイルまたは文字列からスペースを含むすべての数字以外の文字を削除し、たとえば、古い文字の横に新しい結果を出力するタスクが与えられました。

前:

sd67637 8

後:

sd67637 8 = 676378

私は初心者なので、このタスクをどこから始めるべきかわかりません。助けてください

36
Obcure

最も簡単な方法は、正規表現を使用することです

import re
a = 'lkdfhisoe78347834 (())&/&745  '
result = re.sub('[^0-9]','', a)

print result
>>> '78347834745'
63
mar mar

文字を文字ごとにループし、数字のみを含める:

new_string = ''.join(ch for ch in your_string if ch.isdigit())

または、文字列に正規表現を使用します(ある時点で不連続なグループを個別に処理したい場合)...

import re
s = 'sd67637 8' 
new_string = ''.join(re.findall(r'\d+', s))
# 676378

次に、printそれらを出力します。

print(old_string, '=', new_string)
18
Jon Clements

これには builtin があります。

string.translate(s、table [、deletechars])

Deletechars(存在する場合)にあるsからすべての文字を削除してから、テーブルを使用して文字を翻訳します。テーブルがNoneの場合、文字削除ステップのみが実行されます。

>>> import string
>>> non_numeric_chars = ''.join(set(string.printable) - set(string.digits))
>>> non_numeric_chars = string.printable[10:]  # more effective method. (choose one)
'sd67637 8'.translate(None, non_numeric_chars)
'676378'

または、インポートせずに実行できます(ただし、これには理由はありません)。

>>> chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> 'sd67637 8'.translate(None, chars)
'676378'
10
Inbar Rose

string.ascii_lettersを使用して、数字以外を識別できます。

from string import *

a = 'sd67637 8'
a = a.replace(' ', '')

for i in ascii_letters:
    a = a.replace(i, '')

コロンを置き換える場合は、コロン"の代わりに引用符'を使用します。

2