首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >人名表示的不同形式的正则表达式

人名表示的不同形式的正则表达式
EN

Stack Overflow用户
提问于 2018-09-30 06:04:30
回答 2查看 271关注 0票数 1

我正在编写一个python正则表达式,试图捕获人名。

它们可以采用first_name last_namelast_name, first_name的形式。

这是我的正则表达式:

代码语言:javascript
运行
复制
(?P<first>\w+) (?P<last>\w+)|(?P<last>\w+), (?P<first>\w+)

但是,它会导致一个子模式命名错误。有没有办法解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-30 22:41:03

您可以仅对PyPi regex module执行您想要的操作,因为它允许在单个模式中使用相同名称的捕获组:

代码语言:javascript
运行
复制
import regex
sz = ["first_name last_name","last_name, first_name"]
for s in sz:
    print(regex.search(r'(?P<first>\w+) (?P<last>\w+)|(?P<last>\w+), (?P<first>\w+)', s).groupdict())
# => {'last': 'last_name', 'first': 'first_name'}
# => {'last': 'last_name', 'first': 'first_name'}

请参阅Python demo

否则,如果您的输入总是这样,您可以交换名字和姓氏,删除逗号,然后只拆分字符串:

代码语言:javascript
运行
复制
name, surname = re.sub(r'^(\w+),\s+(\w+)$', r'\2 \1', s).split()
# => first_name last_name
# => first_name last_name

参见another Python demo

Another alternative:使用简单的编号捕获组和常规交替,然后拼接相应的捕获:

代码语言:javascript
运行
复制
import re
sz = ["first_name last_name","last_name, first_name"]
for s in sz:
    m = re.search(r'(\w+),\s+(\w+)|(\w+)\s+(\w+)', s)
    if m:
        surname = "{}{}".format(m.group(1) or '', m.group(4) or '')
        name = "{}{}".format(m.group(2) or '', m.group(3) or '') 
        print("{} {}".format(name, surname))
    else:
        print("No match")

在这里,r'(\w+),\s+(\w+)|(\w+)\s+(\w+)'的姓氏在组1或组4,名在组2或组3,加入这些组后,您会得到匹配的组(其中一个总是None,因此拼接时需要or '' )。

票数 0
EN

Stack Overflow用户

发布于 2018-09-30 06:35:40

试试这样的东西,

请注意,Python需要唯一的捕获组名称。

r"(?P<first1>\w+)[ ](?P<last1>\w+)|(?P<last2>\w+),[ ](?P<first2>\w+)"

https://regex101.com/r/FUYxTb/1

代码语言:javascript
运行
复制
   (?P<first1> \w+ )             # (1)
   [ ] 
   (?P<last1> \w+ )              # (2)
|  
   (?P<last2> \w+ )              # (3)
   , [ ] 
   (?P<first2> \w+ )             # (4)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52572918

复制
相关文章

相似问题

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