正则表达式匹配并替换为模式

2024-04-26 05:12:07 发布

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

在Python语言中,变量namemsg有以下字符串模式:

from:\t[xxxxxx]\n
message:\tcontent_1\n
created_time:\tyyyyy\n
from:\t[xxxxxx]\n
message:\tcontent_2\n
created_time:\tyyyyy\n
from:\t[xxxxxx]\n
message:\tcontent_3\n
created_time:\tyyyyy\n
        .
        .
        .
from:\t[xxxxxx]\n
message:\tcontent_n\n
created_time:\tyyyyy\n

我要找的是内容1,内容2,内容3,…,内容n 将任何内容中的任何“\n”替换为“,”

例如某些内容

sentence1\n sentence2\n sentence3

预期结果如下:

sentence1, sentence2, sentence3

但当我试着

msg = re.sub(r"(\]\nmessage:.*?)\n", r"\1,", msg, re.M)

某一组模式,它还将\n之间的内容\u i创建\u时间替换为“,”,但我不想替换它。你知道吗

我的问题是,我想使用re模块在每个内容中搜索\n,并替换为“,”。你知道吗

注意:任何内容\u i都可以包含许多\n内容


Tags: fromre语言内容messagetime模式msg
3条回答

你可以试试这个:

#!/usr/bin/python

import re

msg = r'''
from:\t[xxxxxx]\n
message:\tsentence1\nsententce2\nsentence3\nsentence4\n
created_time:\tyyyyy\n
from:\t[xxxxxx]\n
message:\tsentence1\nsententce2\nsentence3\n
created_time:\tyyyyy\n
'''

print re.sub(r'(?s)(?<=]\\n\nmessage:\\t).*?(?=\\n\ncreated_time:)',
    lambda m: m.group(0).replace(r'\n', ','), msg)
import re
pattern = re.compile(r"(?<=message:\t).*?(?=\ncreated_time:)", re.DOTALL)
print map(lambda x:x.replace("\n", ","), pattern.findall(data))

根据您的数据,您可以使用以下方法来实现这一点。你知道吗

>>> import re
>>> def f_breaks(match):
...     return match.group().replace('\n', ',')
...
>>> msg = 'YOUR STRING DATA'
>>> re.sub(r'(?si)(?<=message:\t).*?(?=\ncreated_time:)', f_breaks, msg)

^{}

相关问题 更多 >