gpt4 book ai didi

regex - 删除所有非键盘字符的正则表达式

转载 作者:行者123 更新时间:2023-12-01 12:53:00 29 4
gpt4 key购买 nike

我已阅读 Remove Non-Alphanumeric Characters from a String并且不相信它解决了我的问题。

我有一个包含单个正则表达式的 Perl 脚本。这旨在用空格替换文本文件中的每个非键盘字符。

#!/opt/local/bin/perl
# Delete any character (replace it with a space) that is not a visible keyboard
# character.
if($#ARGV!=0) {
print "usage: pass a *single* filename as argument. Filename is a text file ...\n";
exit;
}
$infile=$ARGV[0];
#print "\$infile is $infile\n";
open(SOMEFILE, $infile)||die("can't open $infile for reading");
while(<SOMEFILE>) {
$oldStr = $_;
$newStr=$oldStr;
$newStr=~s/[^\w\s`~!@#\$\%^&*()-_=+[\]{}\\|;:'",<.>\/?àèìòùáéíóúäëïöüâêîôûÿøÀÈÌÒÙÁÉÍÓÚÄËÏÖÜÂÊÎÔÛŸØçÇß¿“”‘’æÆ£¢]/ /g;
print "$newStr";
}
close SOMEFILE;
exit;

这应该删除所有 有趣的不可见字符。但它似乎不起作用。示例文件:

$ hex 1bad
0000 43 61 74 68 65 72 69 6e 65 c2 a0 0a Catherin e...

文件 1bad 包含从电子邮件复制和粘贴的文本。此文本在插入到 LaTeX 文件的“逐字”环境中时会返回错误。

为什么这个正则表达式不起作用?

最佳答案

你的过滤器可以写得更简单:

perl -C -Mutf8 -lpe's/[^\w\s`~!@#\$\%^&*()-_=+[\]{}\\|;:\x{27}",<.>\/?àèìòùáéíóúäëïöüâêîôûÿøÀÈÌÒÙÁÉÍÓÚÄËÏÖÜÂÊÎÔÛŸØçÇß¿“”‘’æÆ£¢]/ /g' 1bad

它按设计工作,示例文件中单词末尾的 "\N{NO-BREAK SPACE}" 字符匹配 \s,因此它被取代。您需要将该字符类分开才能更具体。在 Perl 5.16 中,\s 匹配以下字符:

U+0009 CHARACTER TABULATION
U+000A LINE FEED
U+000C FORM FEED
U+000D CARRIAGE RETURN
U+0020 SPACE
U+0085 NEXT LINE
U+00A0 NO-BREAK SPACE
U+1680 OGHAM SPACE MARK
U+180E MONGOLIAN VOWEL SEPARATOR
U+2000 EN QUAD
U+2001 EM QUAD
U+2002 EN SPACE
U+2003 EM SPACE
U+2004 THREE-PER-EM SPACE
U+2005 FOUR-PER-EM SPACE
U+2006 SIX-PER-EM SPACE
U+2007 FIGURE SPACE
U+2008 PUNCTUATION SPACE
U+2009 THIN SPACE
U+200A HAIR SPACE
U+2028 LINE SEPARATOR
U+2029 PARAGRAPH SEPARATOR
U+202F NARROW NO-BREAK SPACE
U+205F MEDIUM MATHEMATICAL SPACE
U+3000 IDEOGRAPHIC SPACE

关于regex - 删除所有非键盘字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11068370/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com