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

Regex 正则表达式从字符串中删除表情符号,regex,unicode,sed,emoji,Regex,Unicode,Sed,Emoji,我有一个图标,我想从中去掉表情符号(也就是说,只需要整个第一部分和行末尾的名称)。示例行如下所示: 1F468 1F3FD 200D 2695 FE0F ; fully-qualified # I like to search for what I actually want and then keep it. This works on OS X in my testing: sed -E 's/^([^#]+)#[^a-zA-Z\s]*(.*)$/\1 # \2/g' EDIT:

我有一个图标,我想从中去掉表情符号(也就是说,只需要整个第一部分和行末尾的名称)。示例行如下所示:

1F468 1F3FD 200D 2695 FE0F   ; fully-qualified # I like to search for what I actually want and then keep it.

This works on OS X in my testing:

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

EDIT: I don't have the Windows version of
sed
to try, but maybe this will work. Not as precise, but short and simple.

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

EDIT AGAIN: My bad, I read the question again and you wanted to delete more than just the emoji. This one should do it.

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

I'm still not pretty sure, but this might work:

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

1F468 1F3FD 200D 2695 FE0F;完全合格的#我喜欢寻找我真正想要的,然后保留它

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

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

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

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

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


sed-e's/;[^#]*#\s*[^a-zA-Z\s]*//我喜欢搜索我真正想要的东西,然后保留它

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

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

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

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

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


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

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

LC_ALL=C sed 's/;.*fully-qualified\s*#[^a-zA-Z]*/; /' file
这将替换任何分号
,后跟任何字符
*
,后跟“完全限定”文本,后跟任意数量的空格,后跟哈希标记,后跟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
这将替换任何分号
,后跟任何字符
*
,后跟“完全限定”文本,后跟任意数量的空格,后跟哈希标记,后跟a-zA-Z
[^a-zA-Z]
,并用分号后跟空格替换所有字符

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



这对你有用吗
sed的/\(.*;\).[^a-zA-Z]*\(.*\)/\1\2/'
您的sed脚本似乎正在尝试使用PCRE,但没有任何版本的sed支持PCRE。您正在运行哪个sed版本-GNU、OSX或其他什么?@archimiro似乎在做一些事情,但并没有在所有情况下删除全部内容。这对您有用吗
sed的/\(.*;\).[^a-zA-Z]*\(.*\)/\1\2/'
您的sed脚本似乎正在尝试使用PCRE,但没有任何版本的sed支持PCRE。您正在运行哪个sed版本-GNU、OSX或其他什么?@archimiro似乎在做一些事情,但并没有在所有情况下删除整个内容。仍然不起作用。与@argimiro命令的输出类似,输出是什么,与您期望的有什么不同?第二个命令将问题中的示例输入数据转换为机器上的数据是什么?仍然与前一个命令相同。这是输出:
1F468 1F3FD 200D 2695 FE0F;这是一个奇怪的结果。也许在编码方面的一些分歧导致了Windows版本对什么是空白有不同的理解。让我们尝试只搜索文本空间:
sed-e's/;[^#]*.[^a-zA-Z]*//不,相同的输出。仍然不起作用。与@argimiro命令的输出类似,输出是什么,与您期望的有什么不同?第二个命令将问题中的示例输入数据转换为机器上的数据是什么?仍然与前一个命令相同。这是输出:
1F468 1F3FD 200D 2695 FE0F;这是一个奇怪的结果。也许在编码方面的一些分歧导致了Windows版本对什么是空白有不同的理解。让我们尝试只搜索文本空间:
sed-e's/;[^#]*.[^a-zA-Z]*//g'
Nope,相同的输出。Nope,输出与我在第三条评论中发布的相同@c4tich似乎是windows问题,您可以尝试使用
LC_ALL=C sed…
运行sed,例如:
LC_ALL=C sed's/*完全合格*#[^a-zA-Z]*/'这就成功了!想解释一下原因吗?另外,我不明白正则表达式中的最后一个分号。。。(为什么[a-zA-Z]与[a-zA-Z]之外的其他东西相匹配?)查找LC_ALL发现:似乎LC_ALL强迫它将输入视为简单的ASCII码,而不是Windows所做的任何事情来破坏编码和抛出正则表达式。这似乎是一个方便的事情,以了解未来。谢谢@ArchimiRoupped回答,如果不是我的母语,我的英语也不是很流利,很抱歉语法或拼写错误,希望解释有用。不,输出与我在第三条评论中发布的相同@c4tich似乎是windows问题,你可以试着用
LC_ALL=C sed…
,运行sed,例如:
LC_ALL=C sed's/*完全合格*#[^a-zA-Z]*/'这就成功了!想解释一下原因吗?另外,我不明白正则表达式中的最后一个分号。。。(为什么[a-zA-Z]与[a-zA-Z]之外的其他东西相匹配?)查找LC_ALL发现:似乎LC_ALL强迫它将输入视为简单的ASCII码,而不是Windows所做的任何事情来破坏编码和抛出正则表达式。这似乎是一个方便的事情,以了解未来。谢谢@archimiroupped回答,如果不是我的第一语言,英语