用同一个字符串中的单个单词替换字符串的一部分

时间:2013-12-17 04:49:04

标签: python regex csv

以下是我的代码输出:

Tue Dec 17 04:34:03 +0000 2013,Email me for tickets email me at stormyjackson28@Gmail.com,1708824644
Tue Dec 17 04:33:58 +0000 2013,@musclepotential ok man. you can email sbrown9049@gmail.com,25016561

我想在,<text>,(逗号之间的文字)中找到电子邮件地址,然后重新打印电子邮件。

示例:

Tue Dec 17 04:34:03 +0000 2013, stormyjackson28@Gmail.com,1708824644
Tue Dec 17 04:33:58 +0000 2013, brown9049@gmail.com,25016561

我知道我可以使用下面的正则表达式来获取电子邮件但是我放弃了其他数据。

string = str(messages)
regex = "\w+@\w+\.com"
match = re.findall(regex,string)

4 个答案:

答案 0 :(得分:2)

基于您的示例
使用此模式,.*?(\S+), Demo
此解决方案独立于电子邮件模式,因为它是最受欢迎的模式之一 它可能会有很多不同,例如first.last@us.gov

答案 1 :(得分:1)

在您当前的代码之后,试试这个:

new_string = string.split(',')
new_string[1] = match[0]
output_string = ', '.join(new_string)

答案 2 :(得分:1)

这可能效果很好......

string = str(messages)
regex = "(?<=,).*?(?=\S+,\d+$)"
ouput_str=re.sub(regex,"",string)

答案 3 :(得分:0)

上述答案依赖于您的文字与您的示例非常相似。此代码更加灵活,可以匹配文本中的任意数量的电子邮件。我没有彻底记录它,但是......

harvest_emails采用一串以行分隔的字符串,每个字符串都以逗号分隔,例如datemessage_stringidentifier,并返回生成3的生成器-length元组(date,comma-sep-emails,identifier)。它将从文本中提取任意数量的电子邮件,并匹配x@x.com | x@x.net | x@x.org形式的任何电子邮件,其中x是任何非零长度系列的非空白字符。

def harvest_emails(target):
    """"Takes string, splits it on \n, then yields each line formatted as:
datecode, email, identifier
"""
    import re

    for line in target.splitlines():
        t = line.split(",")
        yield (
            t[0].strip(),
            ','.join(
                re.findall("\S+@\S+\.(?:com|org|net)",
                           ''.join(t[1:-1]).strip(),re.I)[0:]),
            t[-1].strip())

>>>messages = """04:34:03 +0000 2013,Email me for tickets email me at stormyjackson28@Gmail.com,1708824644
Tue Dec 17 04:33:58 +0000 2013,@musclepotential ok, man. you can email sbrown9049@gmail.com,25016561
Tue Dec 17 04:34:03 +0000 2013, stormyjackson28@Gmail.Com, name@domain.com,1708824644
Tue Dec 17 04:33:58 +0000 2013, brown9049@gmail.com,25016561"""
>>>data = list()
>>>for line in harvest_emails(messages):
        d = dict()
        d["date"],d["emails"],d["id"] = line[0],line[1].split(','),line[2]
        data.append(d)
>>>for value in data:
        print(value)
{'emails': ['stormyjackson28@Gmail.com'], 'date': '04:34:03 +0000 2013', 'id': '1708824644'}
{'emails': ['sbrown9049@gmail.com'], 'date': 'Tue Dec 17 04:33:58 +0000 2013', 'id': '25016561'}
{'emails': ['stormyjackson28@Gmail.Com', 'name@domain.com'], 'date': 'Tue Dec 17 04:34:03 +0000 2013', 'id': '1708824644'}
{'emails': ['brown9049@gmail.com'], 'date': 'Tue Dec 17 04:33:58 +0000 2013', 'id': '25016561'}