我正在寻找一个在任何字符出现 56 次之后匹配任何字符 11 次的正则表达式。
例子:
this is a long formatted line with any char. 56 timesmatchI wantNothingShouldMatchHere
我想要的是:
matchI want
我尝试过的:
(?<=.{56}).{11}
但这匹配
matchI want
ANDNothingShou
ANDldMatchHere
。这:
(?<=.{56}).{11}?
产生相同的结果。
谢谢你的帮助 !
re
注意:在我的例子中,该正则表达式旨在与 python 模块一起使用
答案1
答案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