如何编写正则表达式来捕获Python 3中用标点符号分隔的字母?

时间:2018-01-21 00:15:32

标签: python regex

我是regex的新手,遇到了问题。我需要解析一个在URL中使用的姓氏和名字列表并获取一个html页面。在我的姓氏或名字中,如果它像“John,Jr”那么它应该只返回John但是如果它像“J.T.R”那样,它应该返回“JTR”以使url工作。这是我写的代码,但它没有捕获“JTR”。

import re
last_names_parsed=[]
for ln in last_names:
    L_name=re.match('\w+', ln)
    last_names_parsed.append(L_name[0])

然而,这不会正确地捕捉J.T.R。我应该如何修改代码以正确处理它们?

1 个答案:

答案 0 :(得分:1)

您可以将\.添加到正则表达式中:

import re
final_data = [re.sub('\.', '', re.findall('(?<=^)[a-zA-Z\.]+', i)[0]) for i in last_names]

正则表达式解释:

(?<=^):正面看后,确保正确的正则表达式只会在字符串开头找到匹配时才会注册匹配

[a-zA-Z\.]:匹配任何出现的字母字符:[a-zA-Z],以及句点.

+:只要找到句点或字母字符,就会搜索以前的正则表达式([a-zA-Z\.])。例如,在"John, Jr"中,只会匹配John,因为逗号,未包含在正则表达式[a-zA-Z\.]中,从而停止匹配。