我有一个pdf,其名称是在' /'
之后写的例如:/ John Adam Will Newman
我想提取以' /',
开头的名称我写的代码是:
names=re.compile(r'((/)((\w)+(\s)))+')
然而,它只产生字符串的第一个名称" JOHN"而且这个名字的其余部分也不是两次。
答案 0 :(得分:0)
您的+
位置错误;正如你所说,你的正则表达式需要/John /Adam /Will /Newman
,并带有尾随空格。
r'((/)((\w)+(\s))+)'
好一点;它将接受/John Adam Will
,带有尾随空格;不会Newman
,因为没有任何内容可以匹配\s
。
r'((/)(\w+(\s\w+)*))'
与您发布的内容相符。请注意,有必要重复一个与名称匹配的序列,因为如果有N个单词,我们需要N-1个空格。
(正如OndřejGrover在评论中所说,你可能有太多不必要的捕获括号,但我只留下了它,因为它只会伤害性能。)
答案 1 :(得分:0)
我认为你定义了太多未命名的正则表达式组。我会做这样的事情
import re
s = '/John Adam Will Newman'
name_regexp = re.compile(r'/(?P<name>(\w+\s*)+)')
match_obj = name_regexp.match(s) # match object
group_dict = match_obj.groupdict() # dict mapping {group name: value}
name = group_dict['name']
(?P<name>...)
启动一个命名组
(\w+\s*)
是一个匹配一个或多个字母字符的组,可能后跟一些空格
.match(s)
方法返回的匹配对象有一个方法groupdict()
,它返回一个dict
,它从组名映射到它们的内容