regex Python按正则表达式拆分

a7qyws3x  于 2022-12-05  发布在  Python
关注(0)|答案(3)|浏览(184)

在Python中,我从一个字符串中提取电子邮件,如下所示:

split = re.split(" ", string)
emails = []

pattern = re.compile("^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-\.]+$");

for bit in split:
    result = pattern.match(bit)

    if(result != None):
        emails.append(bit)

只要电子邮件之间有空格,这种方法就能奏效。但有时情况可能并非如此。例如:
Hello, foo@foo.com
将返回:
foo@foo.com
但是,请使用以下字符串:
I know my best friend mailto:foo@foo.com!
这将返回null。因此问题是:如何使正则表达式成为拆分的分隔符?
foo@foo.com
在所有情况下,不管它旁边的标点符号。这在Python中可能吗?
我所说的“spliting by regex”是指如果程序在字符串中遇到模式,它将提取该部分并将其放入列表中。

dw1jzc5e

dw1jzc5e1#

我会说你在寻找re.findall

>>> email_reg = re.compile(r'[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+')
>>> email_reg.findall('I know my best friend mailto:foo@foo.com!')
['foo@foo.com']

请注意,findall可以处理多个电子邮件地址:

>>> email_reg.findall('Text text foo@foo.com, text text, baz@baz.com!')
['foo@foo.com', 'baz@baz.com']
o2g1uqev

o2g1uqev2#

使用re.searchre.findall。您还需要正确转义表达式(.需要在字符类之外转义,而不是在字符类之内),并删除/替换锚点^$(例如,使用\b),例如:

r"\b[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+\b"
oaxa6hgo

oaxa6hgo3#

我在你的正则表达式中看到的问题是你使用了匹配字符串开头的^和匹配字符串结尾的$

>>> re.findall("[A-Za-z0-9\._-]+@[A-Za-z0-9-]+.[A-Za-z0-9-\.]+","I know my best friend mailto:foo@foo.com!")
['foo@foo.com']
>>> re.findall("[A-Za-z0-9\._-]+@[A-Za-z0-9-]+.[A-Za-z0-9-\.]+","Hello, foo@foo.com")
['foo@foo.com']
>>>

相关问题