正则表达式从字符串中删除表情符号

Regex to delete emojis from string

我有一个 list of the Unicode emojis,我想从中删除表情符号(即只想要整个第一部分和行末的名称)。示例行如下所示:

1F468 1F3FD 200D 2695 FE0F   ; fully-qualified # ‍⚕️ man health worker: medium skin tone
1F469 1F3FF 200D 2695        ; non-fully-qualified # ‍⚕ woman health worker: dark skin tone

(为了简单起见,我从中删除了一些 space)。我想要匹配的是 [non-]fully-qualified 部分以及 # 和表情符号,所以我可以用 sed 删除它们。我试过以下正则表达式

 sed -e 's/\<[on-]*fully-qualified\># *.+?(?=[a-zA-Z]) //g' 

试图匹配单词 [non-]fully-qualified a space,# 符号,然后是任何你能找到的(非贪婪的)直到第一个字母,并替换它用一个空字符串。

我想要这样的输出:

1F468 1F3FD 200D 2695 FE0F   ; man health worker: medium skin tone
1F469 1F3FF 200D 2695        ; woman health worker: dark skin tone

我尝试了几个已发布的答案都无济于事,此外,我正在尝试匹配两个边界之间的模式,这是我遇到的问题

编辑:我正在尝试 运行 git bash 中的命令 git windows

我喜欢搜索我真正想要的东西,然后保留它。

在我的测试中,这适用于 OS X:

sed -E 's/^([^#]+)#[^a-zA-Z\s]*(.*)$/ # /g'

编辑:我没有 sed 的 Windows 版本可以尝试,但也许这会奏效。不那么精确,但简短。

sed -e 's/#\s*[^a-zA-Z\s]*/# /g'

再次编辑:糟糕,我又看了一遍这个问题,你想删除的不仅仅是表情符号。这个应该可以。

sed -e 's/;[^#]*#\s*[^a-zA-Z\s]*/; /g'

我还是不太确定,但这可能有用:

sed 's/;.*fully-qualified\s*#[^a-zA-Z]*/; /'

这将替换任何分号 ;,后跟任何字符 .*,后跟 "fully-qualified" 文本,再后跟任意数量的 space ,后跟一个主题标签,然后是任何 not a-zA-Z [^a-zA-Z] 的字符,并将所有字符替换为分号后跟 space。

确保 [a-zA-Z] 只捕获 a 到 zA 到 Z 而没有任何其他字符,这似乎是问题所在,针对该命令的快速修复可能是使用 LC_ALL=C:

LC_ALL=C sed 's/;.*fully-qualified\s*#[^a-zA-Z]*/; /' file