我在Python语言中有一个以下字符串模式,用于变量名 msg :
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
我要匹配的是content_1,content_2,content_3,...,content_n 用“,”
替换任何content_i中的任何“\ n”例如某些content_i
sentence1\n sentence2\n sentence3
预期结果为:
sentence1, sentence2, sentence3
但是当我尝试使用
时,我发现了问题msg = re.sub(r"(\]\nmessage:.*?)\n", r"\1,", msg, re.M)
某些模式组,它还用“,”替换 content_i 和 created_time 之间的 \ n ,但我不想要替换它。
我的问题是,我想使用re模块在每个 content_i 中搜索 \ n ,并仅用“,”替换。
注意:任何 content_i 都可以包含许多 \ n
答案 0 :(得分:1)
import re
pattern = re.compile(r"(?<=message:\t).*?(?=\ncreated_time:)", re.DOTALL)
print map(lambda x:x.replace("\n", ","), pattern.findall(data))
答案 1 :(得分:1)
根据您的数据,您可以使用以下内容来完成此操作。
>>> 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)
请参阅Working demo
答案 2 :(得分:0)
你可以试试这个:
#!/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)