首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式导致输出不正确

正则表达式导致输出不正确
EN

Stack Overflow用户
提问于 2017-01-26 15:01:34
回答 2查看 41关注 0票数 0

我有个pdf文件,名字写在'/‘后面。

/John :亚当·威尔·纽曼

我想提取以“/”开头的名称,

我写的代码是:

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

然而,它只产生字符串"JOHN“的名字,而不是其余名字的两倍。

EN

回答 2

Stack Overflow用户

发布于 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在评论中所说,您可能有太多不需要的捕获括号,但我没有考虑这一点,因为它只会影响性能。)

票数 0
EN

Stack Overflow用户

发布于 2017-01-26 15:10:04

我认为您定义了太多未命名的regexp组。我会做这样的事情

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41868290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档