정규식에 대한 최소 데이터
\documentclass{article}
\begin{document}
-------------------------------------------------------------
A B C D
Header Aligned Aligned Aligned
----------- ------- --------------- -------------------------
First row 12.0 Example of a row that
spans multiple lines.
Second row 5.0 Here's another one. Note
the blank line between
rows.
-------------------------------------------------------------
Table: Here's the caption. It, too, may span
multiple lines.
\section{Lorem Ipsun}
Hello world!
-------------------------------------------------------------
A B C D
Header Aligned Aligned Aligned
----------- ------- --------------- -------------------------
First row 12.0 Example of a row that
spans multiple lines.
Second row 5.0 Here's another one. Note
the blank line between
rows.
-------------------------------------------------------------
Table: Here's the caption. It, too, may span
multiple lines.
\end{document}
원하는 출력
-------------------------------------------------------------
A B C D
Header Aligned Aligned Aligned
----------- ------- --------------- -------------------------
First row 12.0 Example of a row that
spans multiple lines.
Second row 5.0 Here's another one. Note
the blank line between
rows.
-------------------------------------------------------------
Table: Here's the caption. It, too, may span
multiple lines.
-------------------------------------------------------------
A B C D
Header Aligned Aligned Aligned
----------- ------- --------------- -------------------------
First row 12.0 Example of a row that
spans multiple lines.
Second row 5.0 Here's another one. Note
the blank line between
rows.
-------------------------------------------------------------
Table: Here's the caption. It, too, may span
multiple lines.
LaTeX 문서에서 모든 테이블을 추출하고 싶습니다.
의사코드
- 연속된 7개 이상의 "-"와 일치하며 "Table:"까지의 모든 항목과 일치합니다. "Table:" 줄을 포함하지만 그 줄 다음에는 아무것도 포함하지 않습니다.
- 1) 파일 끝까지 반복
내 시도
첫 번째 단계
[-]{10,777}$
이제 "Table:"이라는 단어를 제외한 모든 항목이 포함됩니다.
((?!Table:).)*$
궁극적으로 "테이블:"과 일치하는 모든 것을 포함합니다.
^(?=.*?\Table:\b)
모두 병합
[-]{10,777}$((?!Table:).)*$^(?=.*?\Table:\b)
이것은 작동하지 않습니다. 뭔가 잘못됐는데 뭔지 모르겠어요.
이러한 환경에서 정규 표현식은 Perl에서 어떻게 잘 작동합니까?
답변1
질문을 업데이트하시면 수정하겠습니다. 하지만생각하다당신은 다음과 같은 것을 찾고 있습니다 :
perl -007lne '@F=(/-{7,}.*?Table:.*?\n(?=\n)/gsm); print join "\n", @F' file.tex
설명하다
-007
: 전체 파일을 삼킨다-lne
:l
각 호출에 대해print
새 파일을 추가하고 , 입력 파일을 처리하고, 지정된 스크립트를 실행합니다-e
.@F=(/pattern/gsm)
:pattern
배열의 모든 일치 항목을 저장합니다@F
. 개행 문자가 일치하고 일치 연산자가 여러 줄에 걸쳐 일치하도록g
전역 일치를 활성화합니다 .s
.
m
-{7,}.*?Table:.*?\n(?=\n)
: 7개 이상의 항목과 일치하고-
첫 번째Table:
( ) 까지 일치한.*?Table:)
다음 처음 두 개의 연속 개행 문자( )까지 일치합니다. 두 개 이상의 줄 바꿈을 인쇄하지 않기 위해 미리보기를 사용하고 있습니다..*?\n(?=\n)
print join "\n", @F
:배열의 각 요소를 인쇄하고@F
개행 문자로 구분합니다.
답변2
sed -n '/-\{10,777\}/,/^\s*Table:/p' LaTeX.doc
각 테이블 뒤에 새 줄을 추가하려면 다음을 수행하세요.
sed -n '/^\s*Table:/G;/-\{10,777\}/,/^\s*Table:/p' LaTeX.doc
또는
sed '/-\{10,777\}/,/^\s*Table:/! d;/^\s*Table:/G' LaTeX.doc