我有一个包含以下内容的数据文件。
Some random text here
1
2
3
13
Show:
120
items per page
我想删除数字“Show:“和下面的数字。因此结果变为
Some random text here
items per page
下面的代码:
my $Showing = "((\\d{1,}\\n))*Show:\\n\\d{1,}\\n";
$FileContents =~ s/$Showing//ig;
其结果如下:
Some random text here
1
2
3
items per page
它只删除了“Show:“上面的一个数字,我已经尝试了$Showing变量的一些变体。我如何让它工作呢?
我有另一个包含以下内容的数据文件:
Showing 1 - 46 of 46 products
20
50
per page
有了代码,这个代码就可以工作了。
my $Showing = 'Showing.*\n((\\d{1,}\\n)*)';
$FileContents =~ s/$Showing//ig;
不同的是数字在“显示”下面,而对于不起作用的数字在上面。
2条答案
按热度按时间4uqofj5v1#
尝试的regex看起来不错,尽管我会避免使用双引号(因此需要转义!)。
然后
结果是所需的两行。整个文件在字符串
$text
中。我已经在该模式中到处添加了可能的空格,但是由于
\s
主要包括各种形式的新行,因此您可能只能保留\s+
(我在第一个模式中留下了显式的
\n
,以避免混淆。)文件中的新行可能有问题,比如回车和换行符对(而不仅仅是一个换行符),所以如果这不起作用,试着调整模式中的
\n
。可以选择使用
[\n\r]+
(换行和回车中的一个或两个),或者\R
(Unicode换行符),或者\v
(垂直空格)。或者\s+
,相当于[\h\v]
。请参见上面的perlrecharclass
链接。qlvxas9a2#
我可以通过执行多个正则表达式来解决这个问题。
在Shell中,它的工作原理如下