使用正则表达式 python 提取具有特殊字符的文本
我有一系列格式为 [电子邮件受保护]
。
我想使用正则表达式获取名字、姓氏和域名。
我可以设法获取域名,如下所示:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要在正则表达式中使用括号,以便访问匹配的子字符串。请注意,下面的正则表达式中有三个括号,分别用于匹配名字、姓氏和域名。
还有两个注意事项:
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.
Two more notes:
r
to the regular expression string, to avoid duplicating the backslash character.输出将是一个由名字、姓氏和域组成的元组。
The output will be a tuple consisting of first name, lastname and domain.
如果要使用 3 个捕获组,则可以使用否定字符类来匹配除您希望允许的字符之外的所有字符,以防止使用
.*
部分进行不必要的回溯,模式匹配:
^
字符串开头([^\s@.]+)
捕获 组 1 匹配除空白字符之外的 1+ 个字符.
或@
\.
匹配一个点([^\s@.]+)
捕获组 2 匹配 1+除空格字符.
或@
@
匹配@
字符([^\s @]+)
捕获组 3匹配除空格字符或@
$
之外的 1+ 个字符 字符串结尾请参阅 正则表达式演示和Python 演示。
例如:
输出
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
.*
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 stringSee a regex demo and a Python demo.
For example:
Output