gpt4 book ai didi

java - 有没有办法只替换 java 匹配器正则表达式中的一个捕获组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:37 26 4
gpt4 key购买 nike

我需要在 java 中查找和替换子字符串,例如以“%”开头的变量名,使用正则表达式:

[\s,(](%variable)[\s,)$]

我想找到所有变量,存储它们的名称,然后将它们替换为某个占位符,例如 %%。找不到在java中怎么可能,请帮助。 Matcher#replaceAll 替换了整个正则表达式,但我只需要替换第一组,而不是整个事件。
这是我用于搜索的代码示例:

Matcher m=Pattern.compile(regex).matcher(str);
while(m.find())
{
System.println(m.group(1));
}

更新:解决方案是将捕获设置为整个正则表达式:

([\s,(])(%variable)([\s,)$])

然后使用 replaceAll("$1"+replacement+"$3")

最佳答案

您可以保留一些正则表达式组并替换字符串中出现的其他组。如果我们假设您的正则表达式是:[\\s,\\(](%variable)[\\s,$],那么您可以使用 java 的 replaceAll() 方法.lang.String.您首先需要以单独组的形式设置您的正则表达式

例如:([\\s,\\(])(%variable)([\\s,$]),所以你有

第一组是:[\\s,\\(]

第二组是%variable

第三组是 [\\s,$] ,现在你可以设置你组的引用了 将替换在您的正则表达式中找到的每个出现的最终值,例如,如果我们想用字符串“myNewVal”替换第二组,代码将是:

String myRegex = "([\\s,\\(])(%variable)([\\s,$])";
String replacedValue = originalValue.replaceAll(myRegex,"$1myNewVal$3");

$1$3 指的是第一组和第三组,我们把它们放在replaceValue中。

如果你只想删除第二组,你可以试试这个:

String myRegex = "([\\s,\\(])(%variable)([\\s,$])";
String replacedValue = originalValue.replaceAll(myRegex,"$1$3");

关于java - 有没有办法只替换 java 匹配器正则表达式中的一个捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38193582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com