![用于在 LibreOffice Writer 中替换某些单词的正则表达式](https://linux22.com/image/1520943/%E7%94%A8%E4%BA%8E%E5%9C%A8%20LibreOffice%20Writer%20%E4%B8%AD%E6%9B%BF%E6%8D%A2%E6%9F%90%E4%BA%9B%E5%8D%95%E8%AF%8D%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
在 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
将匹配a
和b
之间的字符,后跟a
和b
。相同字符之间。这与 不同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