用于在 LibreOffice Writer 中替换某些单词的正则表达式

用于在 LibreOffice Writer 中替换某些单词的正则表达式

在 LibreOffice Writer 中,我想使用正则表达式搜索以字母开头的所有单词C并用它们本身和另一个词来代替它们。

对于第一部分,我使用以下内容,一切正常。

\bc[a-z]+

然而对于替换部分,当我写

& text

cat& text代替cat text

我究竟做错了什么?

答案1

其他答案几乎都正确。 find 表达式是正确的:

\b(c[a-z]*)\b

我使用了*in place of+来匹配c单个单词,并且添加了尾随\b以使字数限制更加清晰,但原始形式是可以的。

替换字符串应该是:

$1 text

这确实与 Jim K 的文档链接相符,但在这个领域相当令人困惑。

具体来说,\1可以在搜索表达式中使用,以重复表达式中先前匹配的字符串,但$1必须在替换字符串中使用。在搜索字符串中使用意味着(a.b).*\1将匹配ab之间的字符,后跟ab相同字符之间。这与 不同a.b.*a.b,其中中间的字符可能不同。文档链接中的示例是正确的,但没有解释它在哪里有用。

最后要说明的是,我的 LibreOffice Writer 5.1.4.2 版本在搜索字符串以 开头时拒绝进行替换\b,尽管它正确地找到了所有实例;尾随的字符串\b按预期工作。这是一个错误 - OpenOffice 4.1.3 可以正常工作。解决方法是使用([^a-z]\bc[a-z]*)\b相同的替换字符串作为搜索字符串:这在所有情况下都有效,除了文档的第一个单词以 开头的情况c

答案2

“find”表达式缺少括号来捕获单词。

\b(c[a-z]+)

“替换”表达式本身是正确的。

文档:https://help.libreoffice.org/Common/List_of_Regular_Expressions

相关内容