在Python中,正则表达式获取字符串后的所有文本

0 投票
4 回答
4597 浏览
提问于 2025-04-17 22:52

我有这样一个字符串:

Email: promo@elysianrealestate.com

我想从中提取出电子邮件地址:

我试过这个方法

Email:.*

但是我得到的是整个字符串,而不是仅仅电子邮件

请帮帮我

我正在用Python的Scrapy框架

4 个回答

0

只要你知道“:”这个符号总是把“Email”和实际的邮箱地址分开,那你可以试试这样做(比如 s = "Email: promo@elysianrealestate.com"):

emailAddr = s.split(":")[1].strip()

如果你还需要处理“.com”后面的文字,可以再用一个空格“ ”来分开,然后取列表中的第一个(也就是第0个)元素。

emailAddr = emailAddr.split(" ")[0]
0

你需要创建一个组来标记你想要捕捉的文本。为此,可以尝试用括号把模式包起来:

r'Email:\s+(.+)'
2

这段代码可以帮助你抓取电子邮件地址,它确保你只抓取格式正确的电子邮件:

Email:\s+(\b[A-Za-z0-9(._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b)

这是我测试它的方式:

>>> import re
>>> txt = """
I have this string:

Email: promo@elysianrealestate.com foo bar baz

I want to get the email address:"""
>>> re.findall(r"""
                Email:\s+
                  (\b                   # edge of first part
                   [A-Za-z0-9(._%+-]+   # name, can be dotted
                   @                    # @
                   [A-Za-z0-9.-]+       # domain, e.g. something.something
                   \.                   # .
                   [A-Za-z]{2,4}\b)     # any lettered end, 2 to 4 letters long
                """, txt, re.VERBOSE)
['promo@elysianrealestate.com']
2

如果你的字符串总是以电子邮件结尾,你可以使用:

r'Email:\s*(.*)'

这个想法是从 这里 得到的,但我现在没有办法测试,因为我没有可用的 scrapy shell。

撰写回答