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+._ -]否定された文字クラスです。ここ^で重要なのは、この表現は「数字でも、プラス、ドット、アンダースコア、スペース、ダッシュでもない文字に一致する」という意味です。

+、前のトークンの1つ以上のインスタンスと一致するように正規表現エンジンに指示します。

于 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

これは、数字以外のすべての数字を1つのハイフンに置き換えるために使用するものであり、私にとってはうまくいくようです。

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