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

问题描述 投票:0回答:1

我正在清理一些我从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字符串,以便它按照我的意图工作?

python regex
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.