Perl:删除除特定字符外的所有非ascii字符
Perl: Remove all non-ascii characters except specific ones
我想从文本文件中删除除 Unicode emoticons 之外的所有非 ASCII 字符。我正在使用以下命令删除所有非 ASCII 字符。
perl -i.bak -pe 's/[^[:ascii:]]//g'
是否可以修改此命令以排除表情符号字符?
编辑:
示例输入:Good morning! #Happy #StPatricksDay ♣♥
示例输出:Good morning! #Happy #StPatricksDay
只需扩展要排除的字符以包括表情符号:
perl -i.bak -pe 's/[^[:ascii:]\p{block:Emoticons}\N{U+2639}\N{U+263A}\N{U+263B}]//g'
编辑
经过一番折腾和尝试不同的开关后,我找到了一个适用于 \p{block...} 和 \N{U+xxxx} 类型正则表达式的组合。
perl -CS -pe 's/[^[:ascii:]\p{block:emoticons}\N{U+2639}-\N{U+263B}]//g'
请注意,您的文本必须是 utf-8 才能工作(至少在我的 cygwin 设置中)。
您可以像这样在 Perl 中指定范围:
s='Good morning! #Happy #StPatricksDay ♣♥'
echo "$s" | perl -C -pe 's/[^[:ascii:]\x{1F600}-\x{1F64F}]+//g'
Good morning! #Happy #StPatricksDay
我想从文本文件中删除除 Unicode emoticons 之外的所有非 ASCII 字符。我正在使用以下命令删除所有非 ASCII 字符。
perl -i.bak -pe 's/[^[:ascii:]]//g'
是否可以修改此命令以排除表情符号字符?
编辑:
示例输入:Good morning! #Happy #StPatricksDay ♣♥
示例输出:Good morning! #Happy #StPatricksDay
只需扩展要排除的字符以包括表情符号:
perl -i.bak -pe 's/[^[:ascii:]\p{block:Emoticons}\N{U+2639}\N{U+263A}\N{U+263B}]//g'
编辑
经过一番折腾和尝试不同的开关后,我找到了一个适用于 \p{block...} 和 \N{U+xxxx} 类型正则表达式的组合。
perl -CS -pe 's/[^[:ascii:]\p{block:emoticons}\N{U+2639}-\N{U+263B}]//g'
请注意,您的文本必须是 utf-8 才能工作(至少在我的 cygwin 设置中)。
您可以像这样在 Perl 中指定范围:
s='Good morning! #Happy #StPatricksDay ♣♥'
echo "$s" | perl -C -pe 's/[^[:ascii:]\x{1F600}-\x{1F64F}]+//g'
Good morning! #Happy #StPatricksDay