我是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。我应该如何修改代码以正确处理它们?
答案 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\.]
中,从而停止匹配。