How to replace text
\def\replace#1#2#3{%
\def\tmp##1#2{##1#3\tmp}%
\tmp#1\stopreplace#2\stopreplace}
\def\stopreplace#1\stopreplace{}
\replace{Text should be replaced here, here and here}{here}{Latex}
\bye
written as plain tex but would work in latex too.
This uses the higher-level macro StrSubstitute
from xstring
package. Use [0]
as first optional parameter to replace all occurences of here
, but as egreg stated in a comment, it will also replace in words like where
or there
\documentclass{article}
\usepackage{xstring}
\begin{document}
\StrSubstitute[0]{Text should be replaced here, here and here}{here}{Latex}
\end{document}
A complex solution that only replaces complete words:
\documentclass{article}
\usepackage{xparse,l3regex}
\ExplSyntaxOn
\NewDocumentCommand{\replace}{mmm}
{
\marian_replace:nnn {#1} {#2} {#3}
}
\tl_new:N \l_marian_input_text_tl
\tl_new:N \l_marian_search_tl
\tl_new:N \l_marian_replace_tl
\cs_new_protected:Npn \marian_replace:nnn #1 #2 #3
{
\tl_set:Nn \l_marian_input_text_tl { #1 }
\tl_set:Nn \l_marian_search_tl { #2 }
\tl_set:Nn \l_marian_replace_tl { #3 }
\regex_replace_all:nnN { \b\u{l_marian_search_tl}\b } { \u{l_marian_replace_tl} } \l_marian_input_text_tl
\tl_use:N \l_marian_input_text_tl
}
\ExplSyntaxOff
\begin{document}
\replace{Text should be replaced here, here and here}{here}{\LaTeX{}}
\replace{Text should be replaced here, here and not there}{here}{\LaTeX{}}
\end{document}
A simpler solution that replaces all occurrences:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\replace}{mmm}
{
\marian_replace:nnn {#1} {#2} {#3}
}
\tl_new:N \l_marian_input_text_tl
\cs_new_protected:Npn \marian_replace:nnn #1 #2 #3
{
\tl_set:Nn \l_marian_input_text_tl { #1 }
\tl_replace_all:Nnn \l_marian_input_text_tl { #2 } { #3 }
\tl_use:N \l_marian_input_text_tl
}
\ExplSyntaxOff
\begin{document}
\replace{Text should be replaced here, here and here}{here}{\LaTeX{}}
\replace{Text should be replaced here, here and not there}{here}{\LaTeX{}}
\end{document}