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

时间:2017-08-20 15:11:35

标签: regex unicode sed emoji

我有一个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

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

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

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

我想有这个输出:

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

我已经尝试了几个已发布的答案但无济于事,此外,我试图在两个边界之间匹配一个模式,这是我遇到了麻烦

编辑:我试图在git for windows附带的git bash中运行该命令

2 个答案:

答案 0 :(得分:1)

我喜欢搜索我实际上想要的,然后保留它。

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

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

编辑:我没有试用sed的Windows版本,但也许这样可行。不那么精确,但简短而简单。

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

再次编辑:我的不好,我再次阅读了这个问题,你想删除的不仅仅是表情符号。这个应该这样做。

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

答案 1 :(得分:1)

我仍然不太确定,但这可能会奏效:

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

这将替换任何分号;,后跟任何字符.*,后跟“完全限定”文本,后跟任意数量的空格,后跟一个主题标签,然后是通过 a-zA-Z [^a-zA-Z]的任何字符,并用分号后跟空格替换所有字符。

要确保[a-zA-Z]仅捕获 a到z A到Z 而没有任何其他字符,这似乎是一个问题,快速修复该命令只能使用LC_ALL=C

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