gpt4 book ai didi

python正则表达式: how to remove all punctuation characters from a string but keep those between numbers?

转载 作者:行者123 更新时间:2023-12-01 03:07:18 26 4
gpt4 key购买 nike

我正在从事一个中文 NLP 项目。我需要删除除数字之间的字符之外的所有标点符号,只保留汉字(\u4e00-\u9fff)、字母数字字符(0-9a-zA-Z)。例如,12-34中的连字符应保留,而123后面的等号应删除。

这是我的 python 脚本。

import re
s = "中国,中,。》%国foo中¥国bar@中123=国%中国12-34中国"
res = re.sub(u'(?<=[^0-9])[^\u4e00-\u9fff0-9a-zA-Z]+(?=[^0-9])','',s)
print(res)

预期输出应该是

中国中国foo中国bar中123国中国12-34中国

但结果是

中国中国foo中国bar中123=国中国12-34中国

我不明白为什么输出中有一个额外的等号?

最佳答案

您的正则表达式将首先检查 "="[^\u4e00-\u9fff0-9a-zA-Z]+。这将会成功。然后,它将检查后向查找和先行查找,这必须两者都失败。即:如果其中一个成功,则角色被保留。这意味着您的代码实际上保留了任何一侧有数字的非字母数字、非中文字符。

您可以尝试以下正则表达式:

u'([\u4e00-\u9fff0-9a-zA-Z]|(?<=[0-9])[^\u4e00-\u9fff0-9a-zA-Z]+(?=[0-9]))'

您可以这样使用它:

import re
s = "中国,中,。》%国foo中¥国bar@中123=国%中国12-34中国"
res = re.findall(u'([\u4e00-\u9fff0-9a-zA-Z]|(?<=[0-9])[^\u4e00-\u9fff0-9a-zA-Z]+(?=[0-9]))',s)
print(res.join(''))

关于python正则表达式: how to remove all punctuation characters from a string but keep those between numbers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43239462/

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