regex 用正则表达式统一Python中的电话号码格式

20jt8wwn  于 2023-01-27  发布在  Python
关注(0)|答案(3)|浏览(127)

我正在尝试使用正则表达式来匹配+34(前缀)这样的电话,单个空格,后跟9个数字,这些数字可以用空格分隔,也可以不用空格分隔。

+34 886 24 68 98
+34 980 202 157

我需要一个正则表达式来处理这两个示例。
我试过这个^(\+34)\s([ *]|[0-9]{9}),但不是它。
最后,我想匹配一个电话,比如+34 "前缀",一个空格,后面跟着9个数字,不管给定的情况是什么。为此,我使用re.sub()函数,但我不知道如何使用。
x一个一个一个一个x一个一个二个x

gc0ot86w

gc0ot86w1#

您可以尝试:

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

^-字符串的开头
\+34\s*-匹配后跟任意数量空格的+34
(?:\d\s*){9}-匹配数字,后跟任意数量的空格9次
$-字符串结束
Regex demo.

owfi6suc

owfi6suc2#

我会这样记录数字: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
iibxawm4

iibxawm43#

这里有一个简单的方法:使用regex将加号和所有数字放入数组(每个元素一个字符),然后使用其他列表和字符串操作将其格式化为您喜欢的格式。

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

相关问题