如何使用 xquery 从文本中删除特殊表情符号

how can i remove special emoji's using xquery from text

我有一个 $text = "你好 üäö$"

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

预期结果:“你好 üäö$”

我尝试使用:

replace($text, '\p{IsEmoticons}+', '')

但没用。

它刚刚删除了笑脸

现在结果:“你好 üäö$” 预期结果:“你好 üäö$”

提前致谢:)

我在 my answer to the original question 中概述了方法,我根据您询问如何删除 .

的评论更新了该方法

引自该扩展答案:

The "Emoticons" block doesn't contain all characters commonly associated with "emoji." For example, (Purple Heart, U+1F49C), according to a site like https://www.compart.com/en/unicode/U+1F49C that lets you look up Unicode character information, is from:

Miscellaneous Symbols and Pictographs, U+1F300 - U+1F5FF

此块在 XPath 或 XQuery 处理器中不可用,因为它既未在上面链接的 XML Schema 1.0 规范中列出,也未在 Unicode block names for use in XSD regular expressions—a list of blocks that XPath and XQuery processors conforming to XML Schema 1.1 are required to support.

中列出

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

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

这个returns预期的结果:

Purple  Heart

此方法可应用于 、 或任何其他字符:

  1. 找到角色的 unicode 块。
  2. 使用块名称(如果在 XPath 中可用)或字符 class.
  3. 制作正则表达式

或者,您可以识别要保留的字符块,而不是定位要删除的字符块。例如,给定原始 post 中的示例字符串,目标可能是仅保留“Basic Latin”块中的那些字符。为此,我们可以通过 \P 类别转义匹配不在此块中的字符:

xquery version "3.1";

let $text := "Hello    üäö$"
return
    replace($text, "\P{IsBasicLatin}", "")

这个查询returns:

Hello    $

请注意,这已经删除了带有变音符号的字符,这可能不是我们想要的。这些带有变音符号的字符属于 Latin-1 Supplement 块。为了保留 Latin 和 Latin-1 Supplement 块中的字符,我们需要按如下方式调整查询:

xquery version "3.1";

let $text := "Hello    üäö$"
return
    replace($text, "[^\p{IsBasicLatin}\p{IsLatin-1Supplement}]", "")

... returns:

Hello    üäö$

这现在会保留带有变音符号的字符。

要准确了解您保留或删除的字符,您需要查阅 Unicode 块和图表。