我需要从电子邮件中提取域,但我得到 @domain.com 我不需要域开头的 @

I need to extract domain from email but i get @domain.com i dont need the @ at the start of the domain

我需要从电子邮件中提取域,但我得到了@domain.com。我不需要域

开头的 @
class ExtractDomain(webapp2.RequestHandler):
  def get(self):

    user = (str(users.get_current_user().email()))
    domain = re.search("@[\w.]+", user)
    thisdomain = domain.group()


    template_values = {'user': user, 'thisdomain':thisdomain}
    template = jinja2_env.get_template('templates/domain.html')
    self.response.out.write(template.render(template_values))

你的正则表达式是 @[\w.]+,它匹配 @words.com,你所要做的就是对 @ 做一些事情,所以它不在你的结果中。

解决方案 1:回顾

Lookbehinds 测试前面的字符是否匹配,同时不改变结果。 (?<=@)[\w.]+

解决方案 2:捕获组

你可以指定你想要的部分,在你的情况下 @([\w.]+) 在括号中,然后用 $1 调用它。但是,这需要对您的代码稍作修改。

对于第一个解决方案,您只需要更改正则表达式所在的行:domain = re.search("(?<=@)[\w.\-]+", user) 添加了 \- 以便处理一些多词域名,这对问题来说不是必需的。

使用捕获括号:

1- domain = re.search( "@([\w.]+)", user ).group(1)

或者之后去掉第一个字符:

2- domain = domain[1:]

不确定这是否是正确的方法(不要对 python 做太多)但它有效。