正则表达式从字符串中删除表情符号
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 到 z 和 A 到 Z 而没有任何其他字符,这似乎是问题所在,针对该命令的快速修复可能是使用 LC_ALL=C
:
LC_ALL=C sed 's/;.*fully-qualified\s*#[^a-zA-Z]*/; /' file
我有一个 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 到 z 和 A 到 Z 而没有任何其他字符,这似乎是问题所在,针对该命令的快速修复可能是使用 LC_ALL=C
:
LC_ALL=C sed 's/;.*fully-qualified\s*#[^a-zA-Z]*/; /' file