删除标点符号,但不是全部

pes8fvy9  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(421)

我正在从一个文本变量中删除标点符号,这个变量可以是phase等。
例子:你好,我是拉莫·胡安!霍伊·埃斯德í卡米ón。
我使用的代码是:

REGEXP_REPLACE(text, '[^0-9A-Za-z ]+', '')

这通常效果很好。问题是在某些语言中,我们在某些单词上加了标点符号。示例:dí卡米ón。运行上述代码时,这些单词的输出是“da”“camin”。它删除与标点符号相关的字母。
有没有办法避免这种情况发生?
谢谢!

t2a7ltrp

t2a7ltrp1#

有两种选择:
使用许多unicode属性之一。例如,\p{l}匹配任何语言中的任何unicode字母-在本例中,您可以使用 [^0-9p\{L} ]+ . 有许多不同的unicode属性,以及regex风格之间的差异,所以我建议研究这个链接以供参考。
如果上面的解决方案不适合您,请列出您要匹配的特定unicode代码。例如,í 可与\u00ed匹配,ó 可以与\u00f3匹配,因此对于本例,[^\w\u00ed\u00f3]+就可以了。有很多unicode引用,比如您可以使用的这个。
除此之外,\w的含义与[0-9a-z\u a-z]相同,并且\w返回与\w不匹配的所有字符,因此您可以替换表达式的该部分,即[\w]+,而不是您最初编写的内容\不过,w并不能缓解unicode的问题——这是一个可读性和简单性的问题。

相关问题