用 ascii 连字符“-”替换所有连字符类型

Posted

技术标签:

【中文标题】用 ascii 连字符“-”替换所有连字符类型【英文标题】:Replace all hyphen types by the ascii hyphen "-" 【发布时间】:2019-05-14 00:38:29 【问题描述】:

有没有办法用简单的ascii“-”替换所有类型的连字符? 我正在寻找适用于空间的类似内容:

txt = re.sub(r'[\s]+',' ',txt)

我相信一些非 ascii 的“-”连字符正在避免删除某些特定停用词(由连字符连接的项目名称)的正确过程:

我想用 AR-L1003 替换这个 AR-L1003',但我想对整个文本都这样做。

【问题讨论】:

您能分享一个您希望替换的数据样本和预期结果吗? 为什么不查找所有存在的连字符 (en.wikipedia.org/wiki/Hyphen#Unicode) 并将它们放入正则表达式 [ ]+ @trincot 是的,那是我的问题。我想知道是否有类似 \s 的方法来识别所有连字符!也许没有! 【参考方案1】:

您可以在一个类中列出这些连字符。这是一个可能的列表——根据您的需要进行扩展:

txt = re.sub(r'[‐᠆﹣-⁃−]+','-',txt)

标准的re库不支持\p语法来匹配unicode类别,但是如果可以导入regex,那就可以了:

import regex

txt = regex.sub(r'\pPd+', '-', txt)

【讨论】:

regex替换re吗? 见Add support for Matthew Barnett python regex module。另请阅读 Guido van Rossum 关于该主题的演讲 back in 2011

以上是关于用 ascii 连字符“-”替换所有连字符类型的主要内容,如果未能解决你的问题,请参考以下文章

用一些字母替换非ASCII字符以保持文件格式相同

识别和替换括号之间的非 ASCII 字符

用C语言编程,将字符串s中的所有字符按ASCII值从小到大重新排序后,将排序后的字符串输出

如何从字符串中删除非 ASCII 字符?

linux c 下有没有把字符串转为ASCII

tr用法