【问题标题】:How can i remove emoji's from text using xquery如何使用 xquery 从文本中删除表情符号
【发布时间】:2021-11-22 18:02:09
【问题描述】:

我有一个 $text = "Hello ???????????? üäö$"

我想使用 xquery 从文本中删除表情符号。我该怎么做?

预期结果:“Hello üäö$”

我尝试使用:

replace($text, '[^\x00-\xFFFF]', '')

但没用。

提前致谢:)

【问题讨论】:

  • XQuery 使用 XML 转义约定 ,而不是 C/Java 转义约定 \xFFFF

标签: xml xquery xquery-3.0


【解决方案1】:

要替换表情符号,您可以利用 XPath 对 Character Class Escapes 的支持,特别是 Category 和 Block Escapes,来匹配命名的 Unicode 块:

replace("Hello ??? üäö$", "\p{IsEmoticons}", "")

这会返回预期的结果:

Hello  üäö$

“表情符号”块不包含通常与“表情符号”相关的所有字符。例如,?(紫心,U+1F49C),根据https://www.compart.com/en/unicode/U+1F49C 之类的网站可以让您查找 Unicode 字符信息,来自:

其他符号和象形文字,U+1F300 - U+1F5FF

此块在 XPath 或 XQuery 处理器中不可用,因为它既没有列在上面链接的 XML Schema 1.0 规范中,也没有列在 Unicode block names for use in XSD regular expressions 中——XPath 和 XQuery 处理器符合 XML Schema 1.1 的块列表是required to support

对于 XPath 或 XQuery 中不可用的块中的字符,您可以手动构造字符类。例如,给定上面的紫心字符,我们可以这样匹配:

replace("Purple ? heart", "[🌀-🗿]", "")

这会返回预期的结果:

Purple  Heart

如果您想知道为什么我们使用 🌀 而不是 U+1F300\x1F300,那是因为,正如 Michael Kay 上面提到的,“XQuery 使用 XML 转义约定 ,而不是 C/Java转义约定\xFFFF。”

(我已经更新了答案以响应其他非常有用的 cmets。)

【讨论】:

  • 如果匹配"\p{IsEmoticons}",那么单个表情符号也会被替换。
  • 如果我使用 replace("Hello ??? ?? üäö$", "\p{IsEmoticons}+", ""),它只会删除笑脸表情符号,我怎样才能将它们全部删除来自查询?
  • 我已经更新了我对表情符号块之外的地址字符的回答。
猜你喜欢
  • 2022-01-01
  • 2018-09-22
  • 2018-12-15
  • 2017-10-09
  • 1970-01-01
  • 2017-08-23
  • 2019-01-17
  • 2016-10-02
  • 1970-01-01
相关资源
最近更新 更多