正規表現: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 wantOPの入力例から返されます。

https://perldoc.perl.org/perlre
https://docs.raku.org/言語/regexes

関連情報