我有个pdf文件,名字写在'/‘后面。
/John :亚当·威尔·纽曼
我想提取以“/”开头的名称,
我写的代码是:
names=re.compile(r'((/)((\w)+(\s)))+')
然而,它只产生字符串"JOHN“的名字,而不是其余名字的两倍。
发布于 2017-01-26 15:07:42
您的+位于错误的位置;照现在的情况,您的正则表达式将需要/John /Adam /Will /Newman,并带有尾随空格。
r'((/)((\w)+(\s))+)'稍好一些;它将接受带有尾随空格的/John Adam Will;不接受Newman,因为没有与\s匹配的任何内容。
r'((/)(\w+(\s\w+)*))'与您发布的内容相匹配。请注意,有必要重复一个与名称匹配的序列,因为如果有N个单词,则需要N-1个空格。
(正如Ondřej Grover在评论中所说,您可能有太多不需要的捕获括号,但我没有考虑这一点,因为它只会影响性能。)
发布于 2017-01-26 15:10:04
我认为您定义了太多未命名的regexp组。我会做这样的事情
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>...)启动命名的group(\w+\s*)是匹配一个或多个字母字符的组,后面可能跟一些空格.match(s)方法返回的match对象具有一个方法groupdict(),该方法返回一个从组名映射到其内容的dict https://stackoverflow.com/questions/41868290
复制相似问题