在python中,在关键字前加上逗号并退格

在python中,在关键字前加上逗号并退格,python,re,Python,Re,我需要退格并在文件中的每个“https:”实例前添加一个逗号。我相信正则表达式可以做到这一点,但我不知道如何做到 下面这行是我想要的 2021-05-11 23:39:30,https://www.tiktokv.com/share/video/ 目前的格式是: 2021-05-11 23:35:41 https://www.tiktokv.com/share/video/ 使用带有模式r“(\n)(?=https)”的正则表达式 Ex: s = """2021

我需要退格并在文件中的每个“https:”实例前添加一个逗号。我相信正则表达式可以做到这一点,但我不知道如何做到

下面这行是我想要的

2021-05-11 23:39:30,https://www.tiktokv.com/share/video/
目前的格式是:

2021-05-11 23:35:41
https://www.tiktokv.com/share/video/

使用带有模式
r“(\n)(?=https)”的正则表达式

Ex:

s = """2021-05-11 23:35:41
https://www.tiktokv.com/share/video/
2021-05-11 23:35:41
https://www.tiktokv.com/share/video/
2021-05-11 23:35:41
https://www.tiktokv.com/share/video/"""

print(re.sub(r"(\n)(?=https)", r",", s))
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
['2021-05-11 23:35:41,https://www.tiktokv.com/share/video/\n',
 '2021-05-11 23:35:41,https://www.tiktokv.com/share/video/\n',
 '2021-05-11 23:35:41,https://www.tiktokv.com/share/video/']
输出:

s = """2021-05-11 23:35:41
https://www.tiktokv.com/share/video/
2021-05-11 23:35:41
https://www.tiktokv.com/share/video/
2021-05-11 23:35:41
https://www.tiktokv.com/share/video/"""

print(re.sub(r"(\n)(?=https)", r",", s))
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
['2021-05-11 23:35:41,https://www.tiktokv.com/share/video/\n',
 '2021-05-11 23:35:41,https://www.tiktokv.com/share/video/\n',
 '2021-05-11 23:35:41,https://www.tiktokv.com/share/video/']

没有正则表达式

from io import StringIO
s = StringIO("""2021-05-11 23:35:41
https://www.tiktokv.com/share/video/
2021-05-11 23:35:41
https://www.tiktokv.com/share/video/
2021-05-11 23:35:41
https://www.tiktokv.com/share/video/""")

res = []

for idx, line in enumerate(s, 1):
    if idx % 2 == 0:
        res[-1] += f',{line}'
    else:
        res.append(line.strip())
print(res)
输出:

s = """2021-05-11 23:35:41
https://www.tiktokv.com/share/video/
2021-05-11 23:35:41
https://www.tiktokv.com/share/video/
2021-05-11 23:35:41
https://www.tiktokv.com/share/video/"""

print(re.sub(r"(\n)(?=https)", r",", s))
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
2021-05-11 23:35:41,https://www.tiktokv.com/share/video/
['2021-05-11 23:35:41,https://www.tiktokv.com/share/video/\n',
 '2021-05-11 23:35:41,https://www.tiktokv.com/share/video/\n',
 '2021-05-11 23:35:41,https://www.tiktokv.com/share/video/']

我想你可以读一下文件,把所有的行添加到一个列表中。然后使用
,'.join()
格式化新字符串并将其写入另一个文件

file = open('test.txt')
rows = [row.strip() for row in file]
newfile = open('test2.txt','w')
newfile.write(','.join(rows))

更改时间戳的规则是什么?严格来说,正则表达式本身只进行匹配,不做任何更改。当您使用
re.sub()
sed
时,这是一个额外的层,在正则表达式本身的范围之外处理正则表达式的结果。@CharlesDuffy我无法匹配“https”,只需使用另一个非正则表达式的方法退格即可,这里更大的问题是,这描述的是您想要构建的软件,而不是您构建它的尝试,或者在过程中遇到的任何特定问题。@madil26但在您的示例中确实如此这在一定程度上非常有效,但我没有提到视频链接后有一条空行。此外,该文件有30k行长,因此使用字符串输入将不起作用。我使用字符串输入作为上述代码段的演示,您可以使用
文件
对象