我试着理解python中的正则表达式.如何用正则表达式分割下面的句子?
"familyname, Givenname A.15.10"
Run Code Online (Sandbox Code Playgroud)
这就像python正则表达式http://docs.python.org/library/re.html中的电话簿.该人可能有2个或更多的姓氏和2个或更多的名字.在家族名称存在之后','并且在给定名称存在之后''.最后一个是人的办公室.在知道之前我做了什么
import re
file=open('file.txt','r')
data=file.readlines()
for i in range(90):
person=re.split('[,\.]',data[i],maxsplit=2)
print(person)
Run Code Online (Sandbox Code Playgroud)
它给了我这样的结果
['Wegner', ' Sven Ake G', '15.10\n']
Run Code Online (Sandbox Code Playgroud)
我希望有类似的东西
['Wegner', ' Sven Ake', 'G', '15', '10']. any idea?
Run Code Online (Sandbox Code Playgroud)
在正则表达式世界中,通常更容易"匹配"而不是"分裂".当你"匹配"时,你直接告诉RE引擎你正在寻找什么类型的子串,而不是专注于分离字符.您的问题中的要求有点不清楚,但让我们假设
这转换为正则表达式语言,如下所示:
rr = r"""
^ # begin
([^,]+) # match everything but a comma
(.+?) # match everything, until next match occurs
(\S+) # non-space characters
$ # end
"""
Run Code Online (Sandbox Code Playgroud)
测试:
import re
rr = re.compile(rr, re.VERBOSE)
print rr.findall("de Batz de Castelmore d'Artagnan, Charles Ogier W.12.345")
# [("de Batz de Castelmore d'Artagnan", ', Charles Ogier ', 'W.12.345')]
Run Code Online (Sandbox Code Playgroud)
更新:
rr = r"""
^ # begin
([^,]+) # match everything but a comma
[,\s]+ # a comma and spaces
(.+?) # match everything until the next match
\s* # spaces
([A-Z]) # an uppercase letter
\. # a dot
(\d+) # some digits
\. # a dot
(\d+) # some digits
\s* # maybe some spaces or newlines
$ # end
"""
import re
rr = re.compile(rr, re.VERBOSE)
s = 'Wegner, Sven Ake G.15.10\n'
print rr.findall(s)
# [('Wegner', 'Sven Ake', 'G', '15', '10')]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2134 次 |
最近记录: |