Удаление всех нечисловых символов от строки в Python

Я думаю, что Вы достаточно близки к ответу.

LR (1) средства, что, анализируя от левого до правильных потребностей только один маркер к предвидению для контекста, тогда как LR (∞) означает бесконечное предвидение. Таким образом, синтаксический анализатор должен был бы знать все, что прибывало для выяснения, где это теперь.

126
задан Pang 30 May 2016 в 02:18
поделиться

4 ответа

>>> import re
>>> re.sub("[^0-9]", "", "sdkjh987978asd098as0980a98sd")
'987978098098098'
239
ответ дан 24 November 2019 в 00:50
поделиться

Не уверен, что это наиболее эффективный способ, но:

>>> ''.join(c for c in "abc123def456" if c.isdigit())
'123456'

Часть ''. Join означает объединение всех полученных символов вместе без каких-либо символов между ними . Затем остальная часть представляет собой понимание списка, где (как вы, наверное, догадались) мы берем только те части строки, которые соответствуют условию isdigit .

79
ответ дан 24 November 2019 в 00:50
поделиться

Мы пытаемся поместить объектно-ориентированный стиль поверх реляционной системы. В мире C # это дает нам строго типизированную систему, так что все от начала до конца может быть скомпилировано и протестировано. База данных с трудом проходит тестирование, рефакторинг и т. Д. ООП позволяет нам организовать наше приложение по уровням и иерархиям, что не позволяет реляционная система.

>>> unondig = dict.fromkeys(xrange(65536))
>>> for x in string.digits: del unondig[ord(x)]
... 
>>> s = u'abc123def456'
>>> s.translate(unondig)
u'123456'

Возможно, вы захотите использовать класс сопоставления, а не фактический dict, особенно если ваша строка Unicode может потенциально содержать символы с очень высокими значениями ord (что сделало бы dict слишком большим ;-). Например:

>>> class keeponly(object):
...   def __init__(self, keep): 
...     self.keep = set(ord(c) for c in keep)
...   def __getitem__(self, key):
...     if key in self.keep:
...       return key
...     return None
... 
>>> s.translate(keeponly(string.digits))
u'123456'
>>> 
5
ответ дан 24 November 2019 в 00:50
поделиться

Это должно работать для строк и объектов Юникода:

# python <3.0
def only_numerics(seq):
    return filter(type(seq).isdigit, seq)

# python ≥3.0
def only_numerics(seq):
    seq_type= type(seq)
    return seq_type().join(filter(seq_type.isdigit, seq))
15
ответ дан 24 November 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: