2015-06-10 3 views
3

Я только что закончил писать сводку для исчисления в латексе.Как проанализировать файл LaTex

Основная проблема теперь в том, что файлы содержат много вещей, которые мне сейчас не нужны.

. Файлы .tex содержат много определений и теорем, которые мне нужно изучать наизусть.

Определения имеют свое собственное определение в файле текс, так что любое определение в файле будет начинаться с:

\begin{definition} 

и заканчивается

\end{definition} 

И то же самое для теорем.

Мне нужно написать что-нибудь, чтобы вынуть все, что находится внутри \begin{}...\end{}.

Например, в списке под названием A:

\begin{document} 

\begin{center} 
\begin{definition} Hello WOrld! \end{definition} 
\begin{example}A+B \end{example} 
\begin{theorem} Tre Capre \end{theorem} 
\begin{definition} Hello WOrld2! \end{definition} 
\end{center} 
\end{document} 

должна содержать: [[\begin{definition} Hello WOrld! \end{definition}],[\begin{theorem} Tre Capre \end{theorem}],[\begin{definition} Hello WOrld2! \end{definition}]]

Глядя на этом сайте, я обнаружил, что я могу использовать регулярные выражения:

for i in range(5): 
    x = i+1 
    raw = open('tex/chapter' + str(x) + '.tex') 
    A = [] 
    for line in raw: 
     A.append(re.match(r'(\begin{definition})://.*\.(\end{definition})$', line)) 
print(A) 

но выходные это всего лишь None, и я действительно не знаю, почему

Edit:

import re 


for i in range(5): 
    x = i+1 
    raw = open('tex/chapter' + str(x) + '.tex') 
    A = re.findall(r'\\begin{definition}(.*?)\\end{definition}', raw.read()) 
    print(A) 

выход следующее:

[] 
[] 
[] 
[] 
[] 
+0

Я бы намекнуть вам на процессоре шаблона LILE jinja2 –

+0

Добавить ссылку сайта, потому что на самом деле не совсем ясно, чего вы пытаетесь достичь через 're.match (r '(\ begin {definition}): //.* \. (\ end {definition}) $', line)' – sgp

ответ

4

Из того, что я получаю от вопроса вы просто хотите определения из файла Latex. Вы можете использовать findall непосредственно получить ваши определения:

A = re.findall(r'{definition}(.*?)\\end{definition}', raw.read()) 

Обратите внимание на использование в .*? в целях борьбы с greedy регулярного выражения соответствия

+0

@BioShock Did эта работа для вас? Или вы хотите что-то еще? – sgp

+0

На самом деле это не сработает! Я имею в виду, если я запустил скрипт с этой строкой, и я также добавлю '' print (A) '' он просто печатает '' [] '' (пустой список) – BioShock

+0

@BioShock Что конкретно представляет собой ваш ввод? Проверьте ответ сейчас. Я предполагаю, что '\ b' на вашем вводе ошибочно интерпретируется – sgp

Смежные вопросы