如何在返回整个(修改后的)字符串的同时用replaceAll()替换捕获组?

时间:2019-01-23 14:35:12

标签: java talend

我在正确使用replaceAll()函数时遇到麻烦。我的目的是将文件读取为字符串对象,然后对该字符串进行各种替换。实际上,我的字符串对象是一个XML文档,我已经将其转换为字符串,以便可以对其进行各种修改。这是一种蛮力的方法,因为我有许多具有不同模式的XML文件,因此我的解决方案是将每个文件视为一个字符串对象,然后对该字符串执行各种查找/替换操作。我相信这种方法在技术上适合我要解决的问题。

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

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

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

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

"<application foo"

这可确保保留我的匹配字符串,并且仅替换捕获组。另外,由于这是更大字符串的一部分,因此在正确替换此匹配项后,我还需要保留字符串的其余部分。所以我的字符串对象看起来像:

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

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

0 个答案:

没有答案