0

私は-のようないくつかの文字列を持っています

1. "07870 622103"
2. "(0) 07543 876545"
3. "07321 786543 - not working"

これらの文字列の最後の10桁を取得したいと思います。お気に入り -

1. "07870622103"
2. "07543876545"
3. "07321786543"

これまでに試しました-

a = re.findall(r"\d+${10}", mobilePhone)

助けてください。

4

2 に答える 2

3

文字列を数字でフィルタリングし、最後の 10 を選択するだけで簡単になります。

''.join([c for c in mobilePhone if c.isdigit()][-10:])

結果:

>>> mobilePhone = "07870 622103"
>>> ''.join([c for c in mobilePhone if c.isdigit()][-10:])
'7870622103'
>>> mobilePhone = "(0) 07543 876545"
>>> ''.join([c for c in mobilePhone if c.isdigit()][-10:])
'7543876545'
>>> mobilePhone = "07321 786543 - not working"
>>> ''.join([c for c in mobilePhone if c.isdigit()][-10:])
'7321786543'

ただし、正規表現のアプローチ (数字以外のすべてをフィルタリングする) の方が高速です。

$ python -m timeit -s "mobilenum='07321 786543 - not working'" "''.join([c for c in mobilenum if c.isdigit()][-10:])"
100000 loops, best of 3: 6.68 usec per loop
$ python -m timeit -s "import re; notnum=re.compile(r'\D'); mobilenum='07321 786543 - not working'" "notnum.sub(mobilenum, '')[-10:]"
1000000 loops, best of 3: 0.472 usec per loop
于 2012-11-28T10:01:44.817 に答える
2

正規表現を使用して、数字以外をすべて破棄することをお勧めします。そのようです:

newstring = re.compile(r'\D').sub('', yourstring)

正規表現は非常に単純です -\D非数字を意味します。上記のコードはsub、数字以外の文字を空の文字列に置き換えるために使用します。だからあなたはあなたが望むものを手に入れますnewstring

ああ、最後の10文字を取得するにはnewstring[-10:]

それは正規表現の答えでした。Martijn Pieters の答えは、より Pythonic かもしれません。

于 2012-11-28T10:03:34.967 に答える