使用正则表达式 python 提取具有特殊字符的文本

发布于 2025-01-11 00:11:01 字数 339 浏览 0 评论 0原文

我有一系列格式为 [电子邮件受保护]

我想使用正则表达式获取名字、姓氏和域名。

我可以设法获取域名,如下所示:

domain = re.search('@.+', email).group()

但我遇到了名字和姓氏的问题。

请您解释一下该怎么做。

I have a secuence of emails of the form [email protected].

I would like to get firstname, lastname and domain using regex.

I could manage to get the domain, like this:

domain = re.search('@.+', email).group()

but I'm getting problems with firstname and lastname.

Kindly, can you please explain me how to do it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

傾旎 2025-01-18 00:11:02

您需要在正则表达式中使用括号,以便访问匹配的子字符串。请注意,下面的正则表达式中有三个括号,分别用于匹配名字、姓氏和域名。

m = re.match(r'(.*)\.(.*)@(.*)', email)
assert m is not None
firstname = m.group(1)
lastname = m.group(2)
domain = m.group(3)

还有两个注意事项:

  1. 您需要使用反斜杠转义分隔名字和姓氏的点。
  2. 在正则表达式字符串中使用前缀 r 可以很方便地避免重复反斜杠字符。

You need to use parentheses in regular expressions, in order to access the matched substrings. Notice that there are three parentheses in the regular expression below, for matching the first name, last name and domain, respectively.

m = re.match(r'(.*)\.(.*)@(.*)', email)
assert m is not None
firstname = m.group(1)
lastname = m.group(2)
domain = m.group(3)

Two more notes:

  1. You need to escape the dot that separates the first name and the last name, by using a backslash.
  2. It is convenient to use the prefix r to the regular expression string, to avoid duplicating the backslash character.
向地狱狂奔 2025-01-18 00:11:02
v = "[email protected]"
pattern = re.compile(r"(.*)\.(.*)@([a-z]+)\.[a-z]+")
pattern.findall(v)

pattern.findall(v)
Out[7]: [('firstname', 'lastname', 'gmail')]

输出将是一个由名字、姓氏和域组成的元组。

v = "[email protected]"
pattern = re.compile(r"(.*)\.(.*)@([a-z]+)\.[a-z]+")
pattern.findall(v)

pattern.findall(v)
Out[7]: [('firstname', 'lastname', 'gmail')]

The output will be a tuple consisting of first name, lastname and domain.

暖风昔人 2025-01-18 00:11:02

如果要使用 3 个捕获组,则可以使用否定字符类来匹配除您希望允许的字符之外的所有字符,以防止使用 .*

^([^\s@.]+)\.([^\s@.]+)@([^\s@]+)$

部分进行不必要的回溯,模式匹配:

  • ^ 字符串开头
  • ([^\s@.]+) 捕获 组 1 匹配除空白字符之外的 1+ 个字符 .@
  • \. 匹配一个点
  • ([^\s@.]+) 捕获组 2 匹配 1+除空格字符 .@
  • @ 匹配 @ 字符
  • ([^\s @]+) 捕获组 3匹配除空格字符或 @
  • $ 之外的 1+ 个字符 字符串结尾

请参阅 正则表达式演示Python 演示

例如:

import re

email = "[email protected]";
m = re.match(r'([^\s@.]+)\.([^\s@.]+)@([^\s@]+)

输出

('firstname', 'lastname', 'gmail.com')
, email) if m: print(m.groups())

输出

If you want to use 3 capture groups, you can use a negated character class to match all except the characters that you want to allow to prevent some unnecessary backtracking using the .*

^([^\s@.]+)\.([^\s@.]+)@([^\s@]+)$

In parts, the pattern matches:

  • ^ Start of string
  • ([^\s@.]+) Capture group 1 match 1+ chars other than a whitspace char . or @
  • \. Match a dot
  • ([^\s@.]+) Capture group 2 match 1+ chars other than a whitspace char . or @
  • @ Match an @ char
  • ([^\s@]+) Capture group 3 match 1+ chars other than a whitspace char or @
  • $ End of string

See a regex demo and a Python demo.

For example:

import re

email = "[email protected]";
m = re.match(r'([^\s@.]+)\.([^\s@.]+)@([^\s@]+)

Output

('firstname', 'lastname', 'gmail.com')
, email) if m: print(m.groups())

Output

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文