정규식 Pandoc 테이블로

정규식 Pandoc 테이블로

정규식에 대한 최소 데이터

\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 문서에서 모든 테이블을 추출하고 싶습니다.

의사코드

  1. 연속된 7개 이상의 "-"와 일치하며 "Table:"까지의 모든 항목과 일치합니다. "Table:" 줄을 포함하지만 그 줄 다음에는 아무것도 포함하지 않습니다.
  2. 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

관련 정보