最近从《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
>>>
只需像这样交互式地调整正则表达式,直到它适用于一个输入字符串。然后将工作正则表达式复制回您的程序
