在括号中的时间后添加换行符

Adding line breaks after times in parentheses

我正在尝试从网络抓取中清理一些数据。

这是我正在处理的信息示例:

Best Time
Adam Jones (w/ help) (6:34)Best Time
Kenny Gobbin (a) (2:38)Personal Best
Matt Herrera (12:44)No-record
Nick Elizabeth (19:04)

这是我正在努力实现的一个例子:

Best Time
Adam Jones (w/ help) (6:34)

Best Time
Kenny Gobbin (2:38)

Personal Best
Matt Herrera (12:44)

No-record
Nick Elizabeth (19:04)

我想在每个右括号后面加两行,但是由于时代不同,我不知道如何搜索和替换它。此外,数字有时可能会出现在时间之外。

我最接近的方法是搜索括号内用冒号分隔的数字,但我不知道如何用相同的信息替换它。

re.sub(r"\([0-9]+:[0-9]+\)", "\n\n", result)

有谁知道我怎样才能做到这一点?

请注意,您需要插入两个换行符的位置位于结束括号和字母字符之间。所以,你可以使用:

re.sub(r"\)([A-Za-z])", r")\n\n", data)

例如:

import re
data = """Best Time
Adam Jones (w/ help) (6:34)Best Time
Kenny Gobbin (a) (2:38)Personal Best
Matt Herrera (12:44)No-record
Nick Elizabeth (19:04)"""

result = re.sub(r"\)([A-Za-z])", r")\n\n", data)
print(result)

输出:

Best Time
Adam Jones (w/ help) (6:34)

Best Time
Kenny Gobbin (a) (2:38)

Personal Best
Matt Herrera (12:44)

No-record
Nick Elizabeth (19:04)

以下是其工作原理的解释:

对于我们要匹配的表达式,我们有 r"\)([A-Za-z])":

  • \) 匹配文字结束括号。
  • [A-Za-z] 匹配单个字母字符。
  • [A-Za-z] 括在括号中使其成为我们稍后引用的捕获组。

对于替换表达式,我们有 r")\n\n":

  • )\n\n 添加一个结束括号和两个新行。
  • 指的是之前的捕获组。直觉上,我们捕获紧跟在结束括号之后的字母字符,然后将相同的字符添加回替换表达式。

您可以按照自己的方式进行最小的更改。您只需要了解分组并在 \n\n 之前添加 \g<0>。您可以在有关 search-and-replace.

部分的官方文档中阅读相关信息
re.sub(r"\([0-9]+:[0-9]+\)", "\g<0>\n\n", result)

这里我用组0(()中的匹配)再次插入。每组()为一组,从左到右从0开始数。