用于在标记之间提取数据的Java正则表达式
我正在尝试创建一个正则表达式,它从字符串中提取数据,如用于在标记之间提取数据的Java正则表达式,java,regex,Java,Regex,我正在尝试创建一个正则表达式,它从字符串中提取数据,如 <B Att="text">Test</B><C>Test1</C> test1 提取的输出需要是Test和Test1。这就是我到目前为止所做的: public class HelloWorld { public static void main(String[] args) { String s = "<B>Test</B>";
<B Att="text">Test</B><C>Test1</C>
test1
提取的输出需要是Test和Test1。这就是我到目前为止所做的:
public class HelloWorld {
public static void main(String[] args)
{
String s = "<B>Test</B>";
String reg = "<.*?>(.*)<\\/.*?>";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(s);
while(m.find())
{
String s1 = m.group();
System.out.println(s1);
}
}
}
公共类HelloWorld{
公共静态void main(字符串[]args)
{
字符串s=“测试”;
字符串reg=“(*)”;
模式p=模式编译(reg);
匹配器m=匹配器p;
while(m.find())
{
字符串s1=m.group();
系统输出打印LN(s1);
}
}
}
但这会产生结果Test
。有人能指出我做错了什么吗?三个问题:
- 您的测试字符串不正确
- 组中需要一个非贪婪修饰符
- 您需要指定所需的组(组1)
String s = "<B Att=\"text\">Test</B><C>Test1</C>"; // <-- Fix 1
String reg = "<.*?>(.*?)</.*?>"; // <-- Fix 2
// ...
String s1 = m.group(1); // <-- Fix 3
String s=“test1”// 看起来您正试图在XML和/或HTML上使用正则表达式。我建议不要使用正则表达式,而是创建一个解析器或lexer来处理这种类型的排列。我认为处理和获取XML
节点值的最佳方法就是将其作为XML
处理
如果您真的想坚持使用regex
请尝试:
<B[^>]*>(.+?)</B\s*>
如果你正在使用eclipse,有一个很好的插件可以帮助你检查正则表达式,而无需编写任何类来检查它。
以下是链接:
您需要通过选择窗口->显示视图->其他来显示视图,而不是选择正则表达式Util
我希望它能帮助您处理正则表达式为什么不使用XML解析器呢?我没有复杂的XML文件。这些节点没有任何子节点(即平面结构)。所以我认为正则表达式已经足够好了。谢谢..但是这会为第一次迭代生成输出Test
,并在第二次迭代生成输出Test1
。但是我只想要Test
和Test1
作为输出。@Asha:String s1=m.group(1);现在工作正常..我以前试过,但索引为0。没有意识到它是从1开始的。@Asha:0组表示整个比赛。
<.*?>(.*?)</.*?>