无法知道如何使用替换

时间:2016-11-23 09:17:46

标签: java regex

我有一个像下面的字符串

<a name="1.F"></a>

我正在尝试仅提取值 name 值。我正在使用的正则表达式是。

搜索字符串

<a name=\"(\d)+(\.)(\w)+\"?>

替换字符串

$1$2$3

结果:这里我得到的结果是**

之间的结果

搜索结果:

**<a name="1.F">**</a>

当前替换结果:

1.F</a>

预期替换结果:

1.F

请让我知道,我们如何才能得到预期的结果。

由于

2 个答案:

答案 0 :(得分:3)

鉴于你的例子,你为什么不去寻找一个简单的解决方案?比如:你的价值用双引号括起来 - 所以只需使用这些知识并捕捉这两个“引号”之间的所有内容。

import java.util.regex.*;

public class RegexTest {

  public static void main(String args[]) {
    String s = "<a name=\"1.F\"></a>";
    Pattern p = Pattern.compile("<a name=\\\"(.*)\\\"");
    Matcher m = p.matcher(s);
    if (m.find()) {
      System.out.println(m.group(1));
    }
  }
}   

打印:

1.F

你知道,你甚至不需要正则表达式,你可以使用String.indexOf()来快速获取该引号的位置。

另一方面,如果您的示例只是简化了,您的实际输入非常复杂(例如:真正的HTML或XML)......那么首先要忘记使用正则表达式(请参阅{{3}为什么那是)。

答案 1 :(得分:1)

已更新

@ user3872094我刚用你的模式<a name=\"(\d)+(\.)(\w)+\"?>测试我的代码,它给出了输出1.F。所以我怀疑这个bug来自你的Java代码

    String s = "**<a name=\"1.F\">**</a>";
    Pattern p = Pattern.compile("<a name=\"(\\d)+(\\.)(\\w)+\"?>");
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group(1) + m.group(2) + m.group(3));
    }

=&GT;&GT; 1.F