我的数据框中有一个电话号码列,其中包含大量噪音。所以我想检查是否有任何行由除+,反斜杠常量和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和空格不匹配的字符。
注意:我已经尝试了所有可能的建议,这个问题并没有一个对我有用。任何帮助将受到高度赞赏。
正则表达式解决方案:
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]
非正则表达式解决方案,使用集合。您可以尝试哪种解决方案更快。我想,对于长串,正则表达式是最好的。
allowed=set('abcde')
if set(ph) - allowed:
print('String contains not allowed characters')