Skip to main content
 首页 » 编程设计

Python 正则表达式(来自 Quick Book)

2025年05月04日24tintown

最近从《Python速成书》中了解到了一些关于Python re模块的知识。

我已经尝试测试书中的一段代码。除了我的代码没有错误外,它无法识别文件中给定数据的模式。

    import re 
regexp = re.compile(r"(?P<last>[-a-zA-Z]+)" 
                    r"(?P<first>[-a-zA-Z]+)" 
                    r" ( (?P<middle> ([-a-zA-Z]+)))?" 
                    r": (?P<phone> (\d\d\d-)?\d\d\d-\d\d\d\d)" 
                    ) 
file = open ('dir.txt', 'r') 
for line in file.readlines(): 
    result = regexp.search(line) 
    if result == None: 
        print ("Oops, I don't think this is a record") 
    else: 
        lastname = result.group('last') 
        firstname = result.group('first') 
        middlename = result.group('middle') 
        if middlename == None: 
            middlename = '' 
        phonenumber = result.group('phone') 
        print ('Name:', firstname, middlename, lastname, ' Number: ',phonenumber) 
file.close() 

这是我的文本文件中给出的数据。

Khan, Ahmed Ali : 800-123-4567 
Malik, Asif Ali : 800-123-7844 
Shaikh, Muhammad Sharafat: 300-123-4444 
Shah, Farhat Abbas : 321-822-2977 
Adam, Khalid Ahmed : 000-124-5454 

提前致谢。 :)

请您参考如下方法:

输入数据的正则表达式错误

要修复它,请采取以下方法

放入python立即求值并重新导入

$ python 
Python 2.7.3 (default, Aug  1 2012, 05:14:39)  
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import re 

定义一个字符串作为输入行之一

>>> str="Khan, Ahmed Ali : 800-123-4567" 

一次应用一点正则表达式模式以查看失败的地方

>>> regexp = re.compile(r"(?P<last>[-a-zA-Z]+)") 
>>> result=regexp.search(str) 
>>> print result.group('last') 
Khan 

所以第一个有效,试试前两个

>>> regexp = re.compile(r"(?P<last>[-a-zA-Z]+)" 
...                     r"(?P<first>[-a-zA-Z]+)") 
>>> result=regexp.search(str) 
>>> print result.group('last') 
Kha 
>>> print result.group('first') 
n 

亲爱的!仔细看,str 在 Khan 后面有一个逗号和空格,所以让我们修复它

>>> regexp = re.compile(r"(?P<last>[-a-zA-Z]+),\s+" 
... r"(?P<first>[-a-zA-Z]+)") 
>>> result=regexp.search(str) 
>>> print result.group('last') 
Khan 
>>> print result.group('first') 
Ahmed 
>>>  

只需像这样交互式地调整正则表达式,直到它适用于一个输入字符串。然后将工作正则表达式复制回您的程序