2017-01-24 5 views
1

これは私がほぼ一時間解決しようとしていた非常に明白な間違いのようです。 :(私は、数字をつかむしようとしてハイフンと+だけでサインインします。基本的にすべての\xa0を削除していますregexを使用してリストをクリーンアップする方法は?

lst = ['\xa0\xa0+11-9188882266\xa0\xa0+01-9736475634 ','\xa0\xa0+11-9177772266\xa0\xa0+01-9736475234'] 

私はRegexはそれについて移動する正しい方法だろうと思った。それを試してみましたが、失敗しました:

mRegex = (['+0-9-']) 
lst = re.match(mRegex,lst) 

Traceback (most recent call last): File "", line 1, in File "C:\Python34\lib\re.py", line 160, in match return _compile(pattern, flags).match(string) File "C:\Python34\lib\re.py", line 282, in _compile p, loc = _cache[type(pattern), pattern, flags] TypeError: unhashable type: 'list'

私はregexとさらにいくつかの試みが、その後replaceに切り替え、それを与えた:

h.replace(r"\xa0","")

それはlstに何もしません。正確に同じままです。

私がlen(lst[0])を行うと、私は33という非常に奇妙です。

で:

for i in lst[0]: 
    print(i) 

出力が\xa0は表示されません。

ここでは完全に混乱しています。

答えて

6

最初に、置換/正規表現をリストに適用することはできません。それぞれの文字列に適用する必要があります。また、リスト内包表記を使用してクリーンアップリストを再構築する必要があります。

の接頭辞をそのまま使用する場合は、\xという文字列をそのまま使用してください。

は私がやるだろう:

lst = [x.replace("\xa0","") for x in lst] 

結果で:

['+11-9188882266+01-9736475634 ', '+11-9177772266+01-9736475234'] 

とところで:あなたは基本的に1つの文字列のリストを定義しているので、mRegex = (['+0-9-'])は動作しません。

lst = [re.sub(r"[^\d+\-]","",x) for x in lst] 

(文字が文字クラスに一致しない削除、および\dは(おおよそ)0-9に相当します)

+0

ありがとう:あなたは、おそらく正規表現ソリューションは以下のようになりmRegex = '([0-9\-+])'

を意味しました。このソリューションは完全に機能します。しかし、その間、私は 'h = lst [0]' 'h.split()'を試みました。何らかの理由で今では番号を2つの別々のリスト項目として取得しています。まさに私が望んでいたものですが、それが可能であれば素晴らしいことでしょう。 – Sid

+1

これは、 '\ xa0'がWindowsコンソールで使用されるある種の空白(0x20 + 0x80 = 0xa0)であるためです。 'split'はそれを検出し、空白にしたがって番号を分割します。 –

+0

ありがとうございます。いくつかのことはもっと学ぶべきです。 – Sid

関連する問題