Pythonで文字列から数値を取り除く効率的な方法はありますか? nltkまたは基本pythonを使用していますか?
ありがとう、ベン
はい、これには正規表現を使用できます:
import re
output = re.sub(r'\d+', '', '123hello 456world')
print output # 'hello world'
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
再試行してください。
import re
my_str = '123hello 456world'
output = re.sub('[0-9]+', '', my_str)
以下は、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!
>>>
あなたが求めていることを行う別の方法は、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
何かを行うための最も基本的な方法は、後で、たとえば数か月後に、コードを変更したいときにコードをレビューするときに本当に役立つ場合があります。