정규식: 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

관련 정보