ruby 如何从字符串中删除表情符号/表情符号/特殊图标?

w7t8yxp5  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(140)

所讨论的字符串类似于:托马斯克·卡萨洪🇪🇹
我怎么才能去掉最后一个表情符号/表情符号(不管它叫什么),这样我就可以得到Tomask Kassahun了?当然,也可以是火箭飞船之类的表情。“

xa9qqrwz

xa9qqrwz1#

Ruby 3.2.0更新:Unicode Emoji字符属性

从Ruby 3.2.0开始,Ruby现在支持专门针对Unicode emojis的\p{Emoji}字符属性。这种支持是在Onigmo 6.2.0中引入的,但在Ruby核心中直到Ruby 3.1.2才被 * 记录在案 *。然而,这包含的行为虽然符合规范,但会意外地从字符串中删除非emoji字符,例如数字。因此,最好使用不幸未记录(截至此时)的字符属性\p{Emoji_Presentation}(简写为\p{EPres})。如果你的Ruby版本和/或引擎支持它,你可以使用下面的例子删除 just 表情符号。

示例1:删除表情符号后留下的空白

"Tomask Kassahun 🇪🇹".gsub(/\p{Emoji_Presentation}/, '').strip
#=> "Tomask Kassahun"

字符串

示例二:删除演示而不影响其他Unicode集

"Tomask (mɑ̃ʒe) Kassahun 🇪🇹".gsub(/\p{Emoji_Presentation}/, '').strip
#=> "Tomask (mɑ̃ʒe) Kassahun"


如果您使用的是较旧的Ruby或不支持emoji字符属性的Ruby,那么还有其他属性也可以很好地工作。我在下面描述了它们。

根据其他字符属性删除表情

一种可能的方法是使用“Symbol:Ruby的字符属性中的“其他”。举例来说:

"Tomask Kassahun 🇪🇹".gsub(/\p{So}/, '').strip
#=> "Tomask Kassahun"


这甚至适用于包含重音字符的字符串。例如,从another post借用一些非emoji重音字符作为测试用例:

"Tomask (mɑ̃ʒe) Kassahun 🇪🇹".gsub(/\p{So}/, '').strip
#=> "Tomask (mɑ̃ʒe) Kassahun"

1sbrub3j

1sbrub3j2#

我认为这是一个使用正则表达式的好例子,我不是正则表达式Maven,但我认为下面的表达式可能是一个很好的起点。

str = "Tomask Kassahun 🇪🇹"

字符串
提取传递Element Reference的子字符串,如果提供Regexp,则返回字符串的匹配部分。

str[/^[a-zA-Z]+\s{1}[a-zA-Z]+/] #=> Tomask Kassahun


字符串匹配方法返回数组

str.match(/^[a-zA-Z]+\s{1}[a-zA-Z]+/) #=> ['Tomask Kassahun']


你可以通过索引

str.match(/^[a-zA-Z]+\s{1}[a-zA-Z]+/)[0] #=> Tomask Kassahun


查看https://ruby-doc.org/core-2.7.2/String.html#method-i-5B-5D

相关问题