正则表达式返回None(python)

时间:2016-06-08 01:42:31

标签: python regex search

我只有一个月的时间进入python,这个基本的练习让我不得不走上墙。我正在尝试创建一个搜索脚本来搜索我输入的文本并将结果放在剪贴板上。我被困在大约一个星期以下。如果我直接从一个站点复制文本并输入它,没有结果(我得到一个无输出)。但是,如果我直接复制数字,没有问题,它完全读取它们。我已经尝试了几种方法(如下所示)并且没有运气,它让我感到难过。下面是我粘贴的示例文本,但没有给出任何结果:

博士。有人垃圾邮件

房间:BLD-2001

+353(0)11 123456

人们可以提供的任何输入都会很棒。另外一个问题是,关于学习python的任何书籍/建议都会很棒。目前正在“使用python自动化无聊的东西”。只是为了好玩。提前谢谢。

import re, pyperclip

def findphone(numbers):
    numregex = re.compile(r'\(\d\)\d\d\s\d+')
    numregex1 = re.compile(r'(0)11 123456')
    phoneRegex = re.compile(r'''(
    (\+\d{3})?                    # area code
    (\s|-|\.)?                    # separator
    (\d{3}|\(\d\)\d\d)?           # area code
    (\s|-|\.)?                    # separator
    \d{6}                         # Landline Number 
    )''', re.VERBOSE)
    mo = numregex.search(numbers)
    mo0 = numregex1.search(numbers)
    mo1 = phoneRegex.search(numbers)
    print('mo ' +str(mo))
    print('mo0 ' +str(mo0))
    print('mo1 ' +str(mo1))

print('Input check text')
numbers = input()
findphone(numbers)

1 个答案:

答案 0 :(得分:1)

查看内联更改

# -*- coding: utf-8 -*-
# 1. added above line
import re

def findphone(numbers):
    numregex = re.compile(r'(\(\d\)\d\d\s\d+)') # 2. Added circular brackets around the regular expression
    numregex1 = re.compile(r'(\(0\)11 123456)') # 3. Escaped circular brackets around 0

    # 4. Made small changes to the following, mainly changing brackets.
    phoneRegex = re.compile(r'''
    (\+\d{3})                    # area code
    [\s|-|\.]                     # separator
    (\d{3}|\(\d\)\d\d)?           # area code
    [\s|-|\.]                     # separator
    (\d{6})                         # Landline Number 
    ''', re.VERBOSE)
    mo = numregex.search(numbers)
    mo0 = numregex1.search(numbers)
    mo1 = phoneRegex.search(numbers)
    if mo:
      print('mo ' +str(mo.groups()))
    if mo0:
      print('mo0 ' +str(mo0.groups()))
    if mo1:
      # 5. break down in separate variables
      country_code = mo1.groups()[0]
      area_code = mo1.groups()[1]
      landline = mo1.groups()[2]
      print country_code, area_code, landline

print('Input check text')
findphone("‌Dr. Someone Spam\nRoom: BLD-2001\n+353 (0)11 123456")