簡體   English   中英

正則表達式統一電話號碼格式 Python

[英]Regex to unify a format of phone numbers in Python

我正在嘗試使用正則表達式來匹配 +34(前綴)之類的電話,單個空格,后跟 9 位數字,這些數字可能會或可能不會被空格分隔。

+34 886 24 68 98
+34 980 202 157

我需要一個正則表達式來處理這兩個示例案例。

我試過這個^(\+34)\s([ *]|[0-9]{9})但不是。

最終我會喜歡匹配 +34“前綴”之類的電話,單個空格,后跟 9 位數字,無論給出哪種情況。 為此,我正在使用 re.sub() function 但我不確定如何使用。

+34 886 24 68 98 -> ?
+34 980 202 157  -> ?

+34 846082423 -> `^(\+34)\s(\d{9})$`
+34920459596  -> `^(\+34)(\d{9})$`
import re

from faker import Faker
from faker.providers import BaseProvider

#fake = Faker("es_ES")

class CustomProvider(BaseProvider):

    def phone(self):
        #phone = fake.phone_number()
        phone = "+34812345678"
        return re.sub(r'^(\+34)(\d{9})$', r'\1 \2', phone)

你可以試試:

^\+34\s*(?:\d\s*){9}$

^ - 字符串的開頭

\+34\s* - 匹配+34后跟任意數量的空格

(?:\d\s*){9} - 匹配數字后跟任意數量的空格 9 次

$ - 字符串結尾

正則表達式演示。

我會像這樣捕獲數字: r"(\+34(?:\s?\d){9})" 這將允許您搜索允許在任何數字之前有選擇地放置空格的數字。 使用非捕獲組?:允許重復\s?\d而無需將每個數字單獨列為一個組。

import re

nums = """
Number 1: +34 886 24 68 98
Number 2: +34 980 202 157
Number 3: +34812345678
"""

number_re = re.compile(r"(\+34(?:\s?\d){9})")

for match in number_re.findall(nums):
    print(match)
+34 886 24 68 98
+34 980 202 157
+34812345678

這是一個簡單的方法:使用正則表達式將加號和所有數字放入一個數組中(每個元素一個字符),然后使用其他列表和字符串操作操作按照您喜歡的方式對其進行格式化。

import re

p1 = "+34 886 24 68 98"
p2 = "+34 980 202 157"

pattern = r'[+\d]'

m1 = re.findall(pattern, p1)
m2 = re.findall(pattern, p2)

m1_str = f"{''.join(m1[:3])} {''.join(m1[3:])}"
m2_str = f"{''.join(m2[:3])} {''.join(m2[3:])}"

print(m1_str)  # +34 886246898
print(m2_str)  # +34 980202157

或者使用字符串替換而不是正則表達式刪除空格:

p1 = "+34 886 24 68 98"
p2 = "+34 980 202 157"

p1_compact = p1.replace(' ', '')
p2_compact = p2.replace(' ', '')

p1_str = f"{p1_compact[:3]} {p1_compact[3:]}"
p2_str = f"{p2_compact[:3]} {p2_compact[3:]}"

print(p1_str)  # +34 886246898
print(p2_str)  # +34 980202157

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM