通过正则表达式拆分字符串

2024-10-05 12:16:44 发布

您现在位置:Python中文网/ 问答频道 /正文

假设给我一个字符串,比如:

input = """
abc@gmail.com is a very nice person
xyz@gmail.com sucks
lol@gmail.com is pretty funny."""

我有一个电子邮件地址的正则表达式:^[A-z0-9\+\.]+\@[A-z0-9\+\.]+\.[A-z0-9\+]+$

目标是基于电子邮件地址正则表达式拆分字符串。 输出应为:

["is a very nice person", "sucks", "is pretty funny."]

我一直在尝试使用re.split(EMAIL_REGEX, input),但没有成功。 我将输出作为列表中包含的整个字符串。你知道吗


Tags: 字符串cominputis电子邮件地址prettygmail
3条回答

删除^$锚定,因为它们只匹配字符串的开头和结尾。因为电子邮件地址在字符串的中间,所以它们永远不会匹配。你知道吗

你的regexp还有其他问题。帐户名可以包含许多其他字符,例如_-。域名可以包含-个字符,但不能包含+。而且您不应该使用范围A-z来获取大写和小写字符,因为在两个字母块之间有您可能不想包含的字符(请参见ASCII Table);或者使用A-Za-z或者使用a-z并添加flags = re.IGNORECASE。你知道吗

您可能需要遍历这些行,然后用regex拆分每一行。 另外,regex的末尾不应该有$。你知道吗

尝试以下操作:

EMAIL_REGEX = r"\.[a-z]{3} " # just for the demo note the space
ends =[]
for L in input.split("\n"):
   parts = re.split(EMAIL_REGEX,L)
   if len(parts) > 1:
       ends.append(parts[1])

输出:

['is a very nice person', 'sucks', 'is pretty funny.']

'^$'可能会把它扔掉。它只匹配以匹配正则表达式开头和结尾的字符串。你知道吗

我有你想要的东西:

>>> EMAIL_REGEX = r'[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'
>>> re.split(EMAIL_REGEX, input, flags=re.IGNORECASE)
['\n', ' is a very nice person\n', ' sucks\n', ' is pretty funny.']

相关问题 更多 >

    热门问题