在括号中的时间后添加换行符
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开始数。
我正在尝试从网络抓取中清理一些数据。
这是我正在处理的信息示例:
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开始数。