나는 어떤 문자가 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