我正在尝试在Scala / Spark中创建与语言无关的文本解析器。我正在使用正则表达式从大组文本中删除标点符号。
std::string(std::string&&)
但是,我在中文文本中发现了一些未删除的标点符号。到目前为止,我已经将list_of_strings.map(_.replaceAll("""[\p{Punct}]"""))
添加到了这些字符的正则表达式中。请注意,其中许多与拉丁标点符号相似,但并不完全相同。
Java正则表达式中是否内置有“规范”功能,该功能可让我删除其他语言中的标点符号?除了中文,我还担心阿拉伯语。
此外,我想确保一种语言中的标点符号不是另一种语言中的关键语言组成部分。我不熟悉中文或阿拉伯语,因此我正在寻找母语为母语的人制作的东西。
答案 0 :(得分:4)
您不需要将所有这些Unicode标点字符添加到字符类中。使用\p{Punct}
或等效的Pattern.UNICODE_CHARACTER_CLASS
嵌入式标志选项使(?U)
能够识别Unicode:
.replaceAll("""(?U)\p{Punct}+""", "")
^^^^
请参见Scala demo。
+
之后的\p{Punct}
除去连续的标点字符是块,而不是一个接一个。