【问题标题】:How to perform this RegExp in Python?如何在 Python 中执行这个 RegEx?
【发布时间】:2009-10-11 23:50:59
【问题描述】:

我想在 03.00.00.00.00 中转换 +33.300000000 这种形式的电话号码

+33 表示它可以是 2 或 3 位长度。

. 后面的数字。是电话号码。长度可以是 9 位或 10 位。

我尝试这样:

p = re.compile( "\+[0-9]+\.([0-9]+)", re.VERBOSE)
number = "+33.300000000"
p.sub("0\1", number)

但这不起作用。

但是,搜索接缝工作:

>>> p.search(number).groups()
('300000000',)

之后如何在 Python 中修改 03.00.00.00.00 中的 0300000000 ?

感谢您的帮助,

纳蒂姆

【问题讨论】:

  • 九位数字加前导0,10位数字会怎样?
  • 是的,您将电话代码替换为 0

标签: python string


【解决方案1】:

最简单的方法是混合使用 RE 和纯字符串操作,例如:

import re

def doitall(number):
  # get 9 or 10 digits, or None:
  mo = re.search(r'\d{9,10}', number)
  if mo is None: return None
  # add a leading 0 if they were just 9
  digits = ('0' + mo.group())[-10:]
  # now put a dot after each 2 digits
  # and discard the resulting trailing dot
  return re.sub(r'(\d\d)', r'\1.', digits)[:-1]

number = "+33.300000000"
print doitall(number)

根据需要发出03.00.00.00.00

是的,您可以在 RE 中完成所有操作,但这不值得头疼 - 混合效果很好;-)。

【讨论】:

  • 你也可以使用digits = mo.group().zfill(10)
  • 好的,就是这样。谢谢。
  • return ".".join(re.findall(r'(\d\d)',digits))
【解决方案2】:

在终端中它是这样工作的:

p = re.compile( "\+[0-9]+\.([0-9]+)", re.VERBOSE)
number = "+33.300000000"
p.sub("0\\1", number)

在 python 脚本中它是这样工作的:

p = re.compile( "\+[0-9]+\.([0-9]+)", re.VERBOSE)
number = "+33.300000000"
p.sub("0\1", number)

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多