我正在尝试使用正则表达式来匹配+34(前缀)这样的电话,单个空格,后跟9个数字,这些数字可以用空格分隔,也可以不用空格分隔。
+34 886 24 68 98 +34 980 202 157
我需要一个正则表达式来处理这两个示例。我试过这个^(\+34)\s([ *]|[0-9]{9}),但不是它。最后,我想匹配一个电话,比如+34 "前缀",一个空格,后面跟着9个数字,不管给定的情况是什么。为此,我使用re.sub()函数,但我不知道如何使用。x一个一个一个一个x一个一个二个x
^(\+34)\s([ *]|[0-9]{9})
gc0ot86w1#
您可以尝试:
^\+34\s*(?:\d\s*){9}$
^-字符串的开头\+34\s*-匹配后跟任意数量空格的+34(?:\d\s*){9}-匹配数字,后跟任意数量的空格9次$-字符串结束Regex demo.
^
\+34\s*
+34
(?:\d\s*){9}
$
owfi6suc2#
我会这样记录数字:r"(\+34(?:\s?\d){9})"。这将允许您搜索允许在任何数字之前放置空格的数字。使用非捕获组?:允许重复\s?\d,而无需将每个数字单独列为一个组。
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
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
3条答案
按热度按时间gc0ot86w1#
您可以尝试:
^
-字符串的开头\+34\s*
-匹配后跟任意数量空格的+34
(?:\d\s*){9}
-匹配数字,后跟任意数量的空格9次$
-字符串结束Regex demo.
owfi6suc2#
我会这样记录数字:
r"(\+34(?:\s?\d){9})"
。这将允许您搜索允许在任何数字之前放置空格的数字。使用非捕获组?:
允许重复\s?\d
,而无需将每个数字单独列为一个组。iibxawm43#
这里有一个简单的方法:使用regex将加号和所有数字放入数组(每个元素一个字符),然后使用其他列表和字符串操作将其格式化为您喜欢的格式。
或者使用字符串替换而不是正则表达式删除空格: