仅当不受字母或数字限制时才替换字符串

仅当不受字母或数字限制时才替换字符串

使用StrSubstitutefromxstring我可以查找和替换匹配项。例如:

\StrSubstitute{I like to eat fish.}{fish}{apples}给出“我喜欢吃苹果。”

\StrSubstitute{Do you want to eat?}{eat}{fly}给出“你想飞吗?”

  • 我该如何调整以便仅当匹配的字符串不受字母或数字限制时才发生替换?

例如,将“鱼”替换为“苹果”:

I like to eat fish.给出“我喜欢吃苹果。”(已更改)

I like to go fishing.给出“我喜欢去钓鱼。”(未改变)

@fish are interesting/.给出“@apples 很有趣。”(已更改)

9fish is too many.给出“9条鱼太多了。”(未改变)

在上述情况下,当两侧出现字母(AZ 或 az)或数字(0|+)时,不会发生变化。

答案1

l3regex

\documentclass{article}

\usepackage{l3regex}
\ExplSyntaxOn
\newcommand\replaceall[3]{
  \str_set:Nn \l_temp_str {#1}
  \regex_replace_all:nnN {#2} {#3} \l_temp_str
  \l_temp_str
}
\ExplSyntaxOff
\begin{document}
\replaceall{foo and foo and afoo and foo0 and 123foo123 and foo}{(\W|^)foo(\W|$)}{\1bar\2}
% result:
% bar and bar and afoo and foo0 and 123foo123 and bar
\end{document}

相关内容