私はどの文字が56回出てから11回も一致する正規表現を探しています。
例:
this is a long formatted line with any char. 56 timesmatchI wantNothingShouldMatchHere
私が望むもの:
matchI want
私が試したこと:
(?<=.{56}).{11}
ただし、これは
matchI want
ANDNothingShou
ANDと一致しますldMatchHere
。これ:
(?<=.{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/言語/regexes