5

我的目标是使用正则表达式代码来获取电话号码并删除不需要的字符。

import re
strs = 'dsds +48 124 cat cat cat245 81243!!'
match = re.search(r'.[ 0-9\+\-\.\_]+', strs)

if match:                      
    print 'found', match.group() ## 'found word:cat'
else:
    print 'did not find'

它只返回:

+48 124 

我怎样才能返回整个号码?

4

3 回答 3

6

你想使用sub(),而不是search()

>>> strs = 'dsds +48 124 cat cat cat245 81243!!'
>>> re.sub(r"[^0-9+._ -]+", "", strs)
' +48 124   245 81243'

[^0-9+._ -]是一个否定字符类。这里^很重要——这个表达式的意思是:“匹配一个既不是数字也不是加号、点、下划线、空格或破折号的字符”。

告诉正则表达式引擎匹配前面标记的+一个或多个实例。

于 2012-06-20T11:28:53.360 回答
4

问题re.sub()是您在最终电话号码字符串中获得了额外的空格。非正则表达式方式,返回正确的电话号码(不带空格):

>>> strs = 'dsds +48 124 cat cat cat245 81243!!'
>>> ''.join(x for x in strs if x.isdigit() or x == '+')
'+4812424581243'
于 2012-06-20T11:48:27.753 回答
0

这是我用来用单个连字符替换所有非数字的方法,它似乎对我有用:

# convert sequences of non-digits to a single hyphen
fixed_phone = re.sub("[^\d]+","-",raw_phone)
于 2015-12-11T04:21:57.400 回答