正则表达式:在n个字符之后匹配n个字符一次

正则表达式:在n个字符之后匹配n个字符一次

我正在寻找一个在任何字符出现 56 次之后匹配任何字符 11 次的正则表达式。

例子:

this is a long formatted line with any char. 56    timesmatchI wantNothingShouldMatchHere
  • 我想要的是:

    matchI want
    
  • 我尝试过的:

    (?<=.{56}).{11}
    

    但这匹配matchI wantAND NothingShouAND ldMatchHere

  • 这:

    (?<=.{56}).{11}?
    

    产生相同的结果。

谢谢你的帮助 !


re注意:在我的例子中,该正则表达式旨在与 python 模块一起使用

答案1

这应该有效;强制^56 个字符位于行的开头:

(?<=^.{56}).{11}

演示

答案2

sed -E 's/.{56}(.{11}).*/\1/'

Sed 的想法是匹配整行并仅捕获所需的 11 个字符。他们被捕获在内部,()并且整条线都被该组取代。看使用 \1 保留模式的一部分以获得更详细的解释。

如果要忽略不包含至少 56+11=67 个字符的行,请使用

sed -nE 's/.{56}(.{11}).*/\1/p' file

答案3

使用珀尔

~$ perl -ne 'print $&."\n"  if /(?<=^.{56}).{11}/;'   file

#OR

~$ perl -ne 'print $1."\n"  if /(?<=^.{56})(.{11})/;' file


使用(以前称为 Perl6)

~$ raku -ne 'put $/  if  /<?after ^.**56> .**11 /;'   file

#OR

~$ raku -ne 'put $0  if  /<?after ^ .**56> (.**11)/;' file

所有示例均matchI want从 OP 的示例输入返回。

https://perldoc.perl.org/perlre
https://docs.raku.org/language/regexes

相关内容