使用正则表达式提取具有特殊字符的文本 python
Extract text with special characters using regex python
我有一系列格式为 firstname.lastname@gmail.com
的电子邮件。
我想使用正则表达式获取名字、姓氏和域名。
我可以像这样获取域:
domain = re.search('@.+', email).group()
但是我的名字和姓氏有问题。
您好,您能告诉我怎么做吗?
您需要在正则表达式中使用括号,以便访问匹配的子字符串。请注意,下面的正则表达式中有三个括号,分别用于匹配名字、姓氏和域。
m = re.match(r'(.*)\.(.*)@(.*)', email)
assert m is not None
firstname = m.group(1)
lastname = m.group(2)
domain = m.group(3)
另外两个注意事项:
- 您需要使用反斜杠转义分隔名字和姓氏的点。
- 对正则表达式字符串使用前缀
r
很方便,以避免重复反斜杠字符。
v = "firstname.lastname@gmail.com"
pattern = re.compile(r"(.*)\.(.*)@([a-z]+)\.[a-z]+")
pattern.findall(v)
pattern.findall(v)
Out[7]: [('firstname', 'lastname', 'gmail')]
输出将是一个由名字、姓氏和域组成的元组。
如果你想使用 3 个捕获组,你可以使用否定字符 class 来匹配除你想要允许的字符以外的所有字符,以防止一些不必要的回溯使用 .*
^([^\s@.]+)\.([^\s@.]+)@([^\s@]+)$
在部分中,模式匹配:
^
字符串开头
([^\s@.]+)
捕获 组 1 匹配除空白字符 .
或 @
以外的 1+ 个字符
\.
匹配一个点
([^\s@.]+)
捕获 组 2 匹配除空白字符 .
或 @
以外的 1+ 个字符
@
匹配一个 @
字符
([^\s@]+)
捕获 组 3 匹配除 whitspace 字符或 @
以外的 1+ 个字符
$
字符串结束
看到一个regex demo and a Python demo.
例如:
import re
email = "firstname.lastname@gmail.com";
m = re.match(r'([^\s@.]+)\.([^\s@.]+)@([^\s@]+)$', email)
if m:
print(m.groups())
输出
('firstname', 'lastname', 'gmail.com')
我有一系列格式为 firstname.lastname@gmail.com
的电子邮件。
我想使用正则表达式获取名字、姓氏和域名。
我可以像这样获取域:
domain = re.search('@.+', email).group()
但是我的名字和姓氏有问题。
您好,您能告诉我怎么做吗?
您需要在正则表达式中使用括号,以便访问匹配的子字符串。请注意,下面的正则表达式中有三个括号,分别用于匹配名字、姓氏和域。
m = re.match(r'(.*)\.(.*)@(.*)', email)
assert m is not None
firstname = m.group(1)
lastname = m.group(2)
domain = m.group(3)
另外两个注意事项:
- 您需要使用反斜杠转义分隔名字和姓氏的点。
- 对正则表达式字符串使用前缀
r
很方便,以避免重复反斜杠字符。
v = "firstname.lastname@gmail.com"
pattern = re.compile(r"(.*)\.(.*)@([a-z]+)\.[a-z]+")
pattern.findall(v)
pattern.findall(v)
Out[7]: [('firstname', 'lastname', 'gmail')]
输出将是一个由名字、姓氏和域组成的元组。
如果你想使用 3 个捕获组,你可以使用否定字符 class 来匹配除你想要允许的字符以外的所有字符,以防止一些不必要的回溯使用 .*
^([^\s@.]+)\.([^\s@.]+)@([^\s@]+)$
在部分中,模式匹配:
^
字符串开头([^\s@.]+)
捕获 组 1 匹配除空白字符.
或@
以外的 1+ 个字符
\.
匹配一个点([^\s@.]+)
捕获 组 2 匹配除空白字符.
或@
以外的 1+ 个字符
@
匹配一个@
字符([^\s@]+)
捕获 组 3 匹配除 whitspace 字符或@
以外的 1+ 个字符
$
字符串结束
看到一个regex demo and a Python demo.
例如:
import re
email = "firstname.lastname@gmail.com";
m = re.match(r'([^\s@.]+)\.([^\s@.]+)@([^\s@]+)$', email)
if m:
print(m.groups())
输出
('firstname', 'lastname', 'gmail.com')