0

サイトからいくつかの情報を取得しています。たとえば、一部の顧客の住所を取得しています

address = ['Mr Thomas',
 '+(91)-9849633132, 9959455935',
 '+(91)-9849633132',
 '9196358485',
 '8846853128',
 '8-4-236/2']

上記のリストから、電話番号だけで始まる文字列を無視したい+(91) and 9 and 8ので、以下のように正規表現を使用しました

import re


result = [i for i in address if not re.match(r"[98]\B", i)]

結果

['Mr Thomas','+(91)-9849633132, 9959455935','+(91)-9849633132','8-4-236/2']

で始まる文字列は無視されますが、で始まる文字列9 and 8も無視したい+(91)ので、方法を教えてください。

4

3 に答える 3

1

|を使用して、+(91)の別のチェックを追加するだけです。(または)演算子。そのようです:

>>> [i for i in address if not re.match(r"[98]\B|\+\(91\)\B", i)]
['Mr Thomas', '8-4-236/2']

+、(、および)は特殊文字であるため、エスケープする必要があることに注意してください。

余談ですが、リスト内包表記よりもフィルターを使用する方が効率的かもしれません。

>>> filter(lambda x: not re.match(r"[98]\B|\+\(91\)\B", x), address)
['Mr Thomas', '8-4-236/2']

よくわかりませんが。

編集:それはより効率的ではないようです。ただし、自己文書化の方が多いと思いますが、自由に使用できます。

于 2012-08-07T09:31:34.023 に答える
0
result = [i for i in address if not re.match(r"\+[98]\B", i)]
于 2012-08-07T09:27:24.613 に答える
0

これは機能します:

 result = [i for i in s if not re.match(r'[+89][-()+0-9/\s]+',i)]

なんで?'\B' スイッチは、文字列の先頭で一致が発生してはならないため、ここでは有害です。さらに、提案された検索パターンでは、数値内の空白を使用できます。

于 2012-08-07T10:28:11.700 に答える