regex - 正则表达式匹配特殊字符
问题描述
我正在处理的一个文本文件中有很多特殊字符(行终止符:LF;文件编码:utf-8),其中两个是和。它们对应的十六进制代码是\xf4\x80\x91\x9a
和\xf4\x80\x91\x9d
。
出于测试目的,您可以将以下文本放入文本文件 1.txt:a and a at the line end
或者您可以使用此文件:
https ://drive.google.com/file/d/1E-8oZaLb86x0JE_gFpTkeX9jrbh3OXbF/view?usp=sharing
在像 Sublime 这样的编辑器中,我无法使用它们的十六进制代码匹配这些特殊字符。不确定是否有其他方法可以做到这一点。
使用 perl,我也无法匹配它们。我想使用正则表达式删除所有这些类似汉堡包的字符:
perl -Mutf8::all -pE's,\xf4\x80\x91\x9a,,g; s,\xf4\x80\x91\x9d,,g;' 1.txt > 2.txt
有什么办法可以做到吗?
解决方案
您可以尝试将文件读取为字节/二进制(使用:raw
IO 层):
use feature qw(say);
use strict;
use warnings;
my $fn = 'test.txt';
open ( my $fh, '<:raw', $fn ) or die "Could not open file '$fn': $!";
my $txt = do { local $/; <$fh> };
close $fh;
my @replace = ("\xf4\x80\x91\x9a", "\xf4\x80\x91\x9d");
my ($pat ) = map {qr/$_/} join "|", map quotemeta, @replace;
$txt =~ s/$pat//g;
print $txt;
推荐阅读
- javascript - 如何使用 pm2.start()?
- python - * 在 numpy.random 语句中的作用
- python - for循环中的按钮更新for循环中的标签?
- javascript - 修剪当前 URL 的额外字符?
- http - Dart - HTTP 状态码 200 但响应正文为空
- c++ - std::basic_string 作为函数模板的参数不能从 const char* 推导出来
- sql-server - 用历史平均值替换月值
- google-sheets - 谷歌表格查询=真
- python - 使用队列实现链表:Python
- git - 如何将“origin/master”添加到本地仓库(可能还有远程仓库),尽管我已经可以推送到远程