gpt4 book ai didi

python正则表达式返回非捕获组

转载 作者:行者123 更新时间:2023-12-05 04:54:25 27 4
gpt4 key购买 nike

我想从电子邮件生成用户名:

  • 名字的第一个字母
  • 姓氏的前 7 个字母

例如:

getUsername("my-firstname.my-lastname@email.com")
mmylastn

这是getUsername的代码:

def getUsername(email) :
re.match(r"(.){1}[a-z]+.([a-z]{7})",email.replace('-','')).group()
  • email.replace('-','') 去掉 - 符号
  • 捕获我上面描述的 2 个组的正则表达式

如果我执行 .group(1,2),我可以看到捕获的组是 mmylastn,所以一切都很好。但是使用 .group() 不仅会返回捕获组,还会返回它们之间的所有内容:myfirstnamemlastn

谁能给我解释一下这种行为?

最佳答案

首先,模式中的 . 是一个元字符,它匹配除换行符以外的任何字符。您需要在正则表达式模式中转义 .

此外,{1} 限制量词始终是多余的,您可以安全地将其从您拥有的任何正则表达式中删除。

接下来,如果你需要得到一个mmylastn字符串作为结果,你不能使用match.group(),因为.group() 获取整体匹配值,而不是串联的捕获组值。

所以,在你的情况下,

  • 先检查是否匹配,尝试访问None.groups()会抛出异常
  • 然后加入match.groups()

你可以使用


import re
def getUsername(email) :
m = re.match(r"(.)[a-z]+\.([a-z]{7})",email.replace('-',''))
if m:
return "".join(m.groups())
return email

print(getUsername("my-firstname.my-lastname@email.com"))

查看 Python 演示。

关于python正则表达式返回非捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65773072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com