I am new to Python. I am working on LaTeX file, which contain lot of Math, Programming code, etc. I have replace multiple space " " by " ". But i need to ignore in certain part of my code. For example:
Normal Text: "Hai, I am New to Python". I have replace multi space by single space by "Hai, I am New to Python". This regex was applied to whole document. But i need to ignore multi space in certain LaTeX Tag. For example
Hai, I am New to Python
\begin{lstlisting}[title=Sample]
print("Hai, I am New to Python")
def Code(a):
print(a)
Code("Hai, i am new to Perl")
\end{lstlisting}
After my code multi space was changed to single space between \begin{lstlisting} to \end{lstlisting}
"Hai, I am New to Python"
\begin{lstlisting}[title=Sample]
print("Hai, I am New to Python")
def Code(a):
print(a)
Code("Hai, i am new to Perl")
\end{lstlisting}
How to ignore python regex between \begin{lstlisting} to \end{lstlisting}?
CodePudding user response:
A proper LaTeX parser is the way to go but this may be a 'good enough' solution. See what you think.
import re
text = '''
Hai, I am New to Python
\\begin{lstlisting}[title=Sample]
print("Hai, I am New to Python")
def Code(a):
print(a)
Code("Hai, i am new to Perl")
\\end{lstlisting}
'''
text = re.sub(r' (?!(?:(?!\\begin\{lstlisting\}).)*\\end\{lstlisting\})', ' ', text, flags=re.DOTALL)
print(text)
It works by not replacing the spaces if \end{lstlisting} appears ahead in the string without \begin{lstlisting} appearing before it.
