如何检查字符串是否由Python中给定字符以外的字符组成?

问题描述 投票:0回答:2

我的数据框中有一个电话号码列,其中包含大量噪音。所以我想检查是否有任何行由除+,反斜杠常量和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和空格不匹配的字符。

注意:我已经尝试了所有可能的建议,这个问题并没有一个对我有用。任何帮助将受到高度赞赏。

python regex loops string-matching substitution
2个回答
2
投票

正则表达式解决方案:

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
投票

非正则表达式解决方案,使用集合。您可以尝试哪种解决方案更快。我想,对于长串,正则表达式是最好的。

allowed=set('abcde')

if set(ph) - allowed:
    print('String contains not allowed characters')
© www.soinside.com 2019 - 2024. All rights reserved.