如何使用正则表达式查找前面没有任何内容的动态字符串? (负向回顾失败)

问题描述 投票:0回答:1

这里有一些我需要匹配的字符串(不是行!)。 (点代表不匹配的其他字符串。)

... ThisIsAString ...
... AnotherString ...

以下是我需要避免的一些字符串:

... [TEST:ThisIsAString] ...
... TEST:AnotherString ...

这是我现在拥有的正则表达式:

(?<!TEST:)[a-zA-Z]{5,}(?!\])

愚蠢的部分是,当我不想让它们匹配时,它会匹配第一个像

hisIsAStrin
和第二个像
notherString

我错过了什么?

这将与

grep
sed
一起使用,以用修改后的版本替换字符串。 (我不能只使用
sed
。)

sed grep
1个回答
0
投票

这可能对你有用(GNU sed):

sed -E 's/(TEST: ?)(ThisIsAString|AnotherString) /\1\n\2/
        s/ (ThisIsAString|AnotherString) /X&X/;s/\n//' file

技巧是引入一些脚手架并使用它来匹配或不匹配所需的字符串,然后在打印该行之前将其删除。

由于 sed 通常每次读入一行,换行符永远不会出现,因此它可以用作分隔符并再次安全地删除,而不会影响原始行。

注意不需要将 grep 与 sed 一起使用,因为 sed 的功能足够强大,可以完成这两项工作。然而 sed 并没有采用 Perl 等可以使用的所有现代正则表达式,并且可能不是最容易使用的工具。

© www.soinside.com 2019 - 2024. All rights reserved.