由于正则表达式输出不正确

时间:2017-01-26 07:01:34

标签: python regex

我有一个pdf,其名称是在' /'

之后写的

例如:/ John Adam Will Newman

我想提取以' /',

开头的名称

我写的代码是:

names=re.compile(r'((/)((\w)+(\s)))+')

然而,它只产生字符串的第一个名称" JOHN"而且这个名字的其余部分也不是两次。

2 个答案:

答案 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,它从组名映射到它们的内容