如何匹配模式并从多行字符串中删除整行

Posted

技术标签:

【中文标题】如何匹配模式并从多行字符串中删除整行【英文标题】:How do I match pattern and delete the whole line from multiple lines string 【发布时间】:2021-11-15 13:24:27 【问题描述】:

我有这个多行字符串

IP 5002

<IP 5002
<

abcbbdbdbd
abcbbdbdbd
abcbbdbdbd
abcbbdbdbd
;

我正在尝试匹配“

IP 5002

<

abcbbdbdbd
abcbbdbdbd
abcbbdbdbd
abcbbdbdbd
;

我只删除了

my $str = "sdasdasd
<IP 5002
<

dadas
dasdasd
dasdsada

";

$str =~ s/<IP.*//; 

print "\n" . $str . "\n";

谁能帮忙,搜索结果主要涉及通过不从文件中读取行并写入新文件来删除行。我试图从一个字符串中做到这一点。

谢谢

【问题讨论】:

【参考方案1】:

你可以删除换行符:

$str =~ s/<IP.*\n//;

如果你想避免贪婪匹配:

$str =~ s/<IP.*?\n//;

【讨论】:

如果我们提到贪婪(为什么不提到),那么我还要声明 . 与没有修饰符 /s 的换行符不匹配(没有它,贪婪在这里无关紧要) .

以上是关于如何匹配模式并从多行字符串中删除整行的主要内容,如果未能解决你的问题,请参考以下文章

Python: 正则表达式匹配多行,实现多行匹配模式

如何匹配和删除模式中的字符串

Python正则表达式,多行匹配模式..为啥这不起作用?

如何从pyspark中的文件中匹配/提取多行模式

正则表达式只使用awk打印匹配的字符串而不是整行

awk 在匹配模式之前打印整行