我有一个像下面的字符串
<a name="1.F"></a>
我正在尝试仅提取值 name 值。我正在使用的正则表达式是。
搜索字符串
<a name=\"(\d)+(\.)(\w)+\"?>
替换字符串
$1$2$3
结果:这里我得到的结果是**
之间的结果搜索结果:
**<a name="1.F">**</a>
当前替换结果:
1.F</a>
预期替换结果:
1.F
请让我知道,我们如何才能得到预期的结果。
由于
答案 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