当前位置: 首页 > 面试题库 >

我可以替换Java正则表达式中的组吗?

沈自珍
2023-03-14
问题内容

我有这段代码,我想知道,是否可以替换Java正则表达式中的仅组(不是所有模式)。码:

 //...
 Pattern p = Pattern.compile("(\\d).*(\\d)");
    String input = "6 example input 4";
    Matcher m = p.matcher(input);
    if (m.find()) {

        //Now I want replace group one ( (\\d) ) with number 
       //and group two (too (\\d) ) with 1, but I don't know how.

    }

问题答案:

使用$n(其中n是数字)来引用中捕获的子序列replaceFirst(...)。我假设您想用文字字符串
“ number” 替换第一组,并用第一组的值替换第二组。

Pattern p = Pattern.compile("(\\d)(.*)(\\d)");
String input = "6 example input 4";
Matcher m = p.matcher(input);
if (m.find()) {
    // replace first number with "number" and second number with the first
    String output = m.replaceFirst("number $3$1");  // number 46
}

考虑(\D+)第二组而不是(.*)
*是一个贪婪的匹配器,首先会消耗最后一位。当匹配器意识到最终的(\d)匹配项时,匹配器将不得不回溯,然后才可以匹配最终的数字。



 类似资料:
  • 问题内容: 我有这个字符串: 现在,我想在每个数字之前添加String num:。 因此结果必须是: 这也必须工作: 用于搜索数字的正则表达式是:[0-9]+ 但是我想用num:+ [匹配的子字符串]替换匹配的子字符串。 我现在写了一个带有数字的示例,但另一个示例可以是:在每个电子邮件地址之前添加 ·Email found·: 问题答案: 利用分组。您可以使用括号(并)定义组,并通过组索引$n在哪

  • 问题内容: 有什么方法可以用捕获组的已修改内容替换正则表达式? 例: 我想用$ 1乘以3代替所有出现的情况。 编辑: 看起来好像出了点问题:( 如果我用 引发IllegalStateException:找不到匹配项 但 工作正常,但我不能更改$ 1 :( 问题答案: 要获得第一场比赛,请使用。之后,你可以用来引用此第一个匹配项,并将所有匹配项替换为第一个匹配值乘以3。 如果你想将每个匹配项替换为该

  • 本文向大家介绍Java正则表达式的替换和分组功能,包括了Java正则表达式的替换和分组功能的使用技巧和注意事项,需要的朋友参考一下 前言 这篇来学习正则表达式的替换和分组功能,替换很好理解,分组有点复杂,特别是如何写有效的分组的正则表达式。这篇通过几个练习,简单了解下替换和分组功能。 1.替换功能 在String类有一个替换功能的方法,结合正则表达式去实现替换,下面是replaceAll()方法的

  • 我正在尝试使用方法,只保留字母字符和。我试图用一个空字符串替换每个既不是字母也不是上述字符的字符。 到目前为止,我已经尝试过这样的东西(在不同的变体中),它正确地保留字母,但替换了我想要保留的特殊字符:

  • 下面就来详细介绍Notepad++中关于正则表达式的部分,主要是查找和替换。 对于替换功能,一般的文本编辑器,都具有此功能,但是对于高级的正则表达式替换,则很多都不支持。而此处Notepad++支持此功能。 正则表达式的替换,在很长一段时间内,我都没有用到过。而后来有此需求的时候,由于不熟悉,导致也没去折腾具体如何使用的。 后来有空去弄了下,终于搞懂了。对此类功能不了解的人,会没啥感觉,但是看了下

  • 在这个问题的背景下,我想做以下修改: 查找: funcA(参数0,参数1,参数2,参数3); 替换: funcA可以有除param0之外的任意数量的参数。怎么做呢?为简单起见,忽略基本情况,即当传递给funcA的参数仅为param0时。 funcA是: 职能是: 编辑: 参数(param1,param2..)只是包含字母的字符串。