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

时间:2019-03-30 07:26:10

标签: python regex loops string-matching substitution

我的数据框中有一个电话号码栏,其中包含很多杂音。所以我想检查是否有由+,反斜杠常数和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 个答案:

答案 0 :(得分: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 :(得分:1)

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

allowed=set('abcde')

if set(ph) - allowed:
    print('String contains not allowed characters')