gpt4 book ai didi

Python:re.sub 没有任何改变

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:02 25 4
gpt4 key购买 nike

我有以下代码:

def gettextbyxpath(tree, xpath):
node = tree.xpath(xpath)[0]
try:
text = etree.tostring(node, method="text", encoding='UTF-8').strip()
text = re.sub(' +',' ', text)
text = re.sub('\n+','\n', text)
text = re.sub('\n \n','\n', text)
except:
text = 'ERROR'
return text

对于最后一行,我试图去掉其中只有一个空格的行。真实数据中有相当多的。

当我将上面的代码作为独立测试运行时,它工作正常,但在实际代码中,最后一行根本没有做任何事情!我尝试比较使用和不使用它生成的文件 - 没有区别。

示例输入:

        Brand:

777,Royal Lion



Main Products:

battery, 777, carbon zinc, paper jacket,

我正在尝试去除线条之间的垂直空白。

关于为什么我的代码可能表现如此的任何想法?

最佳答案

至于为什么你的代码按照你描述的方式运行:你从第二次调用 re.sub 获得的 text 的值不包含你正在使用的模式尝试在您上次调用 re.sub 时替换:

>>> text = re.sub('\n+', '\n', text) # 2nd call to re.sub
>>> text
>>> 'Brand:\n 777,Royal Lion\n Main Products:\n battery, 777, carbon zinc, paper jacket,'

因此,您需要从上次调用 re.sub 的模式中删除第二个 \n:

text = re.sub('\n ','\n', text)

这将产生:

Brand:
777,Royal Lion
Main Products:
battery, 777, carbon zinc, paper jacket,

替代方案

def gettextbyxpath(tree, xpath):
node = tree.xpath(xpath)[0]
try:
text = etree.tostring(node, method="text", encoding='UTF-8').strip()
text = '\n'.join(line.strip() for line in text.split('\n') if line.strip())
except:
text = 'ERROR'
return text

输出

Brand:
777,Royal Lion
Main Products:
battery, 777, carbon zinc, paper jacket,

这种方法的不同之处在于,不是使用 re.sub 进行连续替换,而是将 etree.tostring 的输出拆分为 \n。然后,我们过滤结果以排除在调用 .strip() 时减少为空字符串的所有行。这给我们留下了只有具有实际内容的行,从左侧和右侧删除了所有空白。为了获得最终结果,我们使用单个换行符 (\n) 连接行。

关于Python:re.sub 没有任何改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com