Как проверить, состоит ли строка из символов, отличных от заданных символов в Python? - PullRequest
0 голосов
/ 30 марта 2019

У меня есть столбец телефонных номеров в моем кадре данных, который состоит из большого количества шума.Поэтому я хочу проверить, есть ли строка, состоящая из любых символов, кроме +, констант обратной косой черты и 0-9.Если это так, я хочу извлечь только эти строки для всех остальных, я хочу заменить эти символы на ''.Как я могу это сделать.Я публикую минимальную версию своей проблемы, так как мой набор данных слишком велик.Вот что я пробовал

ph = ['00 9108214702Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¢Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x80Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¬', '080 26600704\r\n+91 9342593424']
for x in ph:
    print(re.match('^[\+0-9\r\n]+$', x))

, что не дает мне

, где + 0-9 \ r \ n - допустимый символ.Поэтому все, что я хочу, это те символы, которые не соответствуют +, \ r, \ n, 0-9 и пробелу.

Примечание: я перепробовал все возможные предложения по этому вопросу, и ни один из них не помог мне.любая помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 30 марта 2019

регулярное выражение:

import re

ph = ['00 9108214702Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¢Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x80Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¬', '080 26600704\r\n+91 9342593424']

numbers = [re.findall('[\+0-9\r\n\s]+', x)[0] for x in ph]

решение без регулярных выражений:

ph = ['00 9108214702Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¢Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x80Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¬', '080 26600704\r\n+91 9342593424']

numbers = ["".join([c for c in x if c in "0123456789\n\r+"]) for x in ph]
1 голос
/ 30 марта 2019

Не регулярное выражение, с использованием множеств.Вы можете попробовать, какое решение быстрее.Я полагаю, что для длинных строк регулярное выражение является лучшим.

allowed=set('abcde')

if set(ph) - allowed:
    print('String contains not allowed characters')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...