web-dev-qa-db-ja.com

Pythonの文字列から番号を取り除く

Pythonで文字列から数値を取り除く効率的な方法はありますか? nltkまたは基本pythonを使用していますか?

ありがとう、ベン

8
ben890

はい、これには正規表現を使用できます:

import re
output = re.sub(r'\d+', '', '123hello 456world')
print output  # 'hello world'
25
Martin Konecny

str.translate が効率的です。

In [7]: 'hello467'.translate(None, '0123456789')
Out[7]: 'hello'

比べる str.translateに対してre.sub

In [13]: %%timeit r=re.compile(r'\d')
output = r.sub('', my_str)
   ....: 
100000 loops, best of 3: 5.46 µs per loop

In [16]: %%timeit pass
output = my_str.translate(None, '0123456789')
   ....: 
1000000 loops, best of 3: 713 ns per loop
11
Robᵩ

再試行してください。

import re
my_str = '123hello 456world'
output = re.sub('[0-9]+', '', my_str)
5
optimcode

以下は、str.join()str.isnumeric()、および3.xで機能するジェネレータ式を使用するメソッドです。

>>> my_str = '123Hello, World!4567'
>>> output = ''.join(c for c in my_str if not c.isnumeric())
>>> print(output)
Hello, World!
>>> 

これは、Unicode文字列を使用する場合、2.xでも機能します。

>>> my_str = u'123Hello, World!4567'
>>> output = ''.join(c for c in my_str if not c.isnumeric())
>>> print(output)
Hello, World!
>>> 

うーん。ペーパークリップを投げると、MacGyverのエピソードができます。

更新

これは重複として締め出されていることは知っていますが、Python 2とPython 3:

>>> my_str = '123Hello, World!4567'
>>> output = ''.join(map(lambda c: '' if c in '0123456789' else c, my_str))
>>> print(output)
Hello, World!
>>>
1
Doug R.

あなたが求めていることを行う別の方法は、forループを使用して、ある文字列から別の新しい空の文字列に文字を追加することです。文字列は不変であることを友好的に思い出させます。これは、反復するときにchがどうなるかについて考えられる結果を検討する、よりヌービーにやさしいアプローチです。

def removeNumbersFromStrings(string):
newString = ""
for ch in string:
    if ch == '0' or ch == '1' or ch == '2' or ch == '3' or ch == '4' or ch == '5' or ch == '6' or ch == '7' or ch == '8' or ch == '9':
        newString = newString 
    else:
        newString = newString + ch
return newString

何かを行うための最も基本的な方法は、後で、たとえば数か月後に、コードを変更したいときにコードをレビューするときに本当に役立つ場合があります。

1
Allison