首页 > 解决方案 > 如何在返回整个(修改后的)字符串的同时用 replaceAll() 替换捕获组?

问题描述

我无法正确使用 replaceAll() 函数。我的目标是将文件作为字符串对象读取,然后对该字符串进行各种替换。事实上,我的字符串对象是一个 XML 文档,我已将其转换为字符串以允许我对其进行各种修改。这是一种蛮力方法,因为我有许多具有各种架构的 XML 文件,因此我的解决方案是将每个文件视为一个字符串对象,然后对该字符串执行各种查找/替换操作。我相信这种方法在技术上适合我必须解决的问题。

我实际使用的工具是 Talend,但这都是 Java 的幕后工作,我的代码非常标准的 Java 表达式。这是我到目前为止所做的:

row1.content.replaceAll("<application (uuid)", "foo")

row1.content 是我的包含 XML 的字符串对象。我的匹配表达式正常工作,但它用 foo 替换了整个匹配。我的目标是只用 foo 而不是整个字符串替换 uuid。我确信这很常见,即用正则表达式匹配一个字符串,然后只替换该字符串的一个子集。但是,在我的情况下,整个字符串都被替换为 foo。我知道您可以使用 $1、$2 等来引用捕获组,但我不知道如何仅替换我的捕获组。我根据我看到的帖子尝试了以下语法:$1foo, $1=foo, $1;foo. 但是,这只是分别用 uuidfoo、uuid=foo、uuid;foo 打印我的整个字符串。

如前所述,我需要返回以下内容:

"<application foo"

这确保了我的匹配字符串被保留并且只替换了捕获组。另外,因为这是一个更大字符串的一部分,所以在正确替换了这个匹配之后,我还需要保留字符串的其余部分。所以我的字符串对象看起来像:

"<application foo blah blah blah...."

然后,我将对字符串对象的单独部分应用一些其他替换(请参阅上面的解决方案),然后我的最终 XML 文档将在我持久化之前进行所有相关的字符串替换。整个解决方案是允许我屏蔽文件的某些部分以满足数据隐私要求。

标签: javatalend

解决方案


推荐阅读