【问题标题】:What is a RegEx to find phone numbers in Python?在 Python 中查找电话号码的 RegEx 是什么?
【发布时间】:2013-08-31 14:30:04
【问题描述】:

我正在尝试在 python 中创建一个正则表达式来检测 7 位数字并从 .vcf 文件更新联系人。然后它将数字修改为 8 位数字(只需在数字前添加 5)。事情是正则表达式不起作用。

我收到错误消息“扫描字符串文字时 EOL”

regex=re.compile(r'^(25|29|42[1-3]|42[8-9]|44|47[1-9]|49|7[0-9]|82|85|86|871|87[5-8]|9[0-8])/I s/^/5/')

#Open file for scanning
f = open("sample.vcf")

#scan each line in file
for line in f:
    #find all results corresponding to regex and store in pattern
    pattern=regex.findall(line)
#isolate results
    for word in pattern:
        print word
        count = count+1 #display number of occurences
        wordprefix = '5{}'.format(word)
        s=open("sample.vcf").read()
        s=s.replace(word,wordprefix)
        f=open("sample.vcf",'w')
        print wordprefix
        f.write(s)
        f.close()       

我怀疑我的正则表达式的格式不正确,无法检测具有 2 位数字的特定数字模式,这些数字具有特定格式,例如 25x 和 29x 以及可以是任何数字模式的 5 位数字..(总计 7位数)

谁能帮我找出在这种情况下采用的正确格式?

【问题讨论】:

  • 为什么正则表达式看起来像那样。为什么不简单地 [0-9]{7} 查找该行中的所有 7 位数字?

标签: python regex phone-number


【解决方案1】:

/I 不是您在 python 中为正则表达式提供修饰符的方式。而且你也不像s///那样做替换。

您应该使用re.sub() 进行替换,并将修饰符指定为re.I,作为re.compile 的第二个参数:

reg = re.compile(regexPattern, re.I)

然后对于字符串s,替换将如下所示:

re.sub(reg, replacement, s)

因此,您的正则表达式对我来说看起来很奇怪。如果要匹配以2529 开头的7 位数字,则应使用:

r'(2[59][0-9]{5})'

如果要替换,请使用"5\1"。总之,对于字符串s,您的代码如下所示:

reg = re.compile(r'(2[59][0-9]{5})', re.I)
new_s = re.sub(reg, "5\1", s)

【讨论】:

  • +1 不仅用于回答 EOL,还用于修复他可怕的长正则表达式。
  • 嘿,谢谢。稍后再试。它很长是有原因的,因为只需要更改某些数字模式,还有以 421 422 和 423 等开头的数字......所有这些都列在正则表达式中
  • @scandalous 当然,你可以试试。此外,如果您能给出确切的要求,我们可以帮助您创建更短的正则表达式模式。
猜你喜欢
  • 2011-04-21
  • 2021-11-10
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
相关资源
最近更新 更多