如何修复Python正则表达式中的re.sub捕获?

时间:2019-04-03 04:40:40

标签: python regex

我正在清理从PDF中提取的一些用于文本分析的数据。我已经注意到错误之一是在以“ y”结尾的单词中出现奇怪的间距。具体来说,最后一个y与单词之间用空格theor y隔开。我正在尝试使用re.sub来标识这些实例,然后折叠空间。

我已经能够写出我认为是一个好的正则表达式字符串(请参见https://regex101.com/r/M1jpe6/5),但是我没有得到我期望的结果。我怀疑我缺少有关re.sub方法的信息。

这是我的玩具代码。

import re
string = 'this is my theor y of dance'
regex_y = r'\b\w*\b(\sy)\b'

new_string = re.sub(regex_y, 'y', string)
print(new_string)

我期望从上面打印的是

this is my theory of dance

但是它实际打印的是

this is my y of dance

由于正则表达式中唯一的捕获组是(\sy),因此我希望将y替换为y。相反,很明显,我匹配了较大的字符串theor y,然后将整个内容替换为y

为什么我仅捕获(\sy)时会发生这种情况?如何写我的re.sub字符串,使其按预期工作?

1 个答案:

答案 0 :(得分:1)

您的示例有点人为设计,但是如果您想在悬挂y字符之前删除空格,我将使用以下代码:

string = 'this is my theor y of dance'
string = re.sub(r'\b\s+y\b', 'y', string)
print(string)

this is my theory of dance

此处使用捕获组的问题是您希望显示整个输入句子,并进行一些修改。使用捕获组方法,您需要匹配并捕获整个字符串。