【问题标题】:How to string replace in a list of phone numbers in python?如何在python中的电话号码列表中进行字符串替换?
【发布时间】:2019-05-15 03:18:42
【问题描述】:

我在列表中有这些电话号码:

+61 2 3456 2718
03 2756 2876
4567 8937 
+61 5 6573 8593
05 8583 7932

如果为 0,我想删除第一个数字,并在每个数字中加上 +61。我该怎么做?

import re 
for i in phone:
    print(re.sub(r"(\+?\d{3})(\d{4})(\d+)", r"\1 \2 \3", i))
    re.sub('^\d+', '', i)

【问题讨论】:

  • 电话号码:[+61 2 3456 2718]、[03 2756 2876]、[4567 8937]、[+61 5 6573 8593]、[05 8583 7932]
  • 是的,这是我的问题。谢谢艾玛

标签: python regex python-3.x string replace


【解决方案1】:

如果所有电话号码都以0+61 之类的国际代码(或其他国际代码)开头,并且您不需要任何其他检查,则您的代码可以简单(易读)如下:

fixed_phone_numbers = [f'+61{n[1:]}' if n[0] == '0' else n for n in phone_numbers]

如果出于某种原因,您想在 Python 2 中执行此操作:

fixed_phone_numbers = ['+61' + n[1:] if n[0] == '0' else n for n in phone_numbers]

【讨论】:

  • 感谢 Grismar,在这里我想使用正则表达式而不是简单的循环
  • @KingStone 因为 Grismar 使用 f-string,这是 Python 3.6 以后的新功能。但是您可以在 Python 2.X 版本中使用 str.format() 而不是 f-string 或者可以接受编辑后的答案。
  • @subaskhanal 我认为列表推导是一种更加 Pythonic 的解决方案,在这种情况下使用正则表达式几乎没有优势,除非您对匹配有更多限制 - 因此假设。跨度>
  • 是的,我很欣赏你的想法,但我的代码中有正则表达式强制。无论如何感谢你的逻辑。我也有一些东西要向你学习。
  • 'regex compulsion' 似乎是 SO 的常见困扰... :)
【解决方案2】:

您可以检查第一个字符。如果它是'0',则将字符串替换为“+61”+“substring_of_phone_number_from_position_1”(i[1:])。

import re 
for i in phone:
    if i[0]=='0':
        i='+61'+i[1:]
    elif i[0]!='+':
        i='+61'+i

【讨论】:

  • 嗨 Mahbubcseju,这个代码在第一个 0 时有效,但我需要每个电话号码都以 +61 开头意味着没有国家代码但不以 0 开头的电话号码也需要更新。
  • 让 8068676 成为一个数字,所以它将是 +618068676?已编辑!
  • 谢谢,这就是我想要的,但我想使用正则表达式解决这个问题。而且我在实施时遇到问题。
【解决方案3】:
phone = ["+61 2 3456 2718",
"03 2756 2876",
"4567 8937 ",
"+61 5 6573 8593",
"05 8583 7932"]
import re 
for i in phone:
    if(not i.startswith('+61')):
      if(re.match(r'^0', i)):
        i = re.sub('^0', '+61', i)
      else:
        i = '+61 ' + i
    print(i)

+61 2 3456 2718
+613 2756 2876
+61 4567 8937
+61 5 6573 8593
+615 8583 7932

【讨论】:

  • 谢谢。它很管用,但我需要每个以 +61 开头的电话号码。这在这里不起作用。
  • 更新了我的答案
【解决方案4】:

希望它有所帮助:-)。我只使用了正则表达式

In [1]: strings = """+61 2 3456 2718
   ...: 03 2756 2876
   ...: 4567 8937 
   ...: +61 5 6573 8593
   ...: 05 8583 7932"""
In [3]: import re

In [12]: for phoneno in strings.split('\n'):
    ...:     print(re.sub(r'^(0|\+61|)',r'+61',phoneno))
    ...:     
    ...:     

+61 2 3456 2718
+613 2756 2876
+614567 8937 
+61 5 6573 8593
+615 8583 7932

【讨论】:

    猜你喜欢
    • 2016-12-12
    • 2019-09-29
    • 2015-03-22
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2014-06-13
    • 2018-11-28
    相关资源
    最近更新 更多