当前位置: 首页 > 知识库问答 >
问题:

获取正则表达式数据

仲孙鸿畴
2023-03-14

我正在尝试使用一个Java正则表达式来提取数据。它符合我的数据,但我无法得到组数据。我正在尝试获取数据1,xmlAggregator,268803451,3。查看文档,我假设如果在\d+和\w+周围加上(),就会得到组中的数字和字符串。对如何更改正则表达式有什么建议吗?

字符串:

Span(trace_id:1, name:XmlAggregator, id:268803451, parent_id:3)

Java代码:

      String pattern="Span\\(trace_id:(\\d+), name:(\\w+), id:(\\d+), parent_id:(\\d+), (duration:(\\d+))*";
      Pattern r = Pattern.compile(pattern);
      Matcher m = r.matcher(line);

      int count = 0;

      while(m.find()) {
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
         System.out.println("Found value: " + m.group(count) );
         count++;
      }

输出:

Match number 0
start(): 0
end(): 64
Found value: Span(trace_id:1, name:XmlAggregator, id:268803451, parent_id:3, 

希望得到:

   
Found value: 1 
Found value: XmlAggregator 
Found value: 268803451 
Found value: 3 

共有2个答案

墨翔宇
2023-03-14

您可以在匹配结果上使用group方法访问捕获组(未转义括号内的匹配部分):

System.out.println("Trace ID = " + m.group(1));
System.out.println("Name = " + m.group(2));
// etc...

请注意,您从1开始计算捕获组,而不是从0开始计算捕获组。这是因为组0对应于整个匹配的字符串。

潘弘扬
2023-03-14

每个值都在一个组内。因此,您可以循环遍历匹配的组数,并为每个组打印组号、值、开始索引等:

if(m.find()) {
    for(int count = 1; count <= m.groupCount(); count++) {
        System.out.println("Match number " + count);
        System.out.println("start(): " + m.start(count));
        System.out.println("end(): " + m.end(count));
        System.out.println("Found value: " + m.group(count));
    }
}
 类似资料:
  • 问题内容: 我在表格栏中 我只需要得到那行,列中的值正好是10个符号,所有这些符号都只是数字 为此必须编写什么查询? 我在尝试 但这不会返回0行 问题答案: 您正在寻找的模式是或。 一切都在手册中。

  • 假设我有这个虚拟URL,我需要提取植物及其颜色作为 下面的I have正在按预期捕获我需要的元素,但是当我的URL中的植物少于4株时,它无法捕获任何东西。底部有一个指向regex测试员的链接,其中有示例代码和URL,您可以使用。 如何修改这个正则表达式,使其动态工作,从而在不需要静态URL结构的情况下捕获可用内容。现在,假设我最多只能捕获4株植物(8组) https://regex101.com/

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 ngx.re.* 的规范,即使您对 Lua 语言中的规范非常熟悉,我们仍不建议使用 Lua 中的正则表达式。一是因为 Lua 中正则表达式的性能并不如 ngx.re.* 中的正则表达式优秀;二是 Lua 中的正则表达式并不符合 POSIX 规范,而 ngx.re.* 中实现的是标准的 POSIX 规范,后者明显更具备通用

  • 一、概述 二、匹配单个字符 三、匹配一组字符 四、使用元字符 五、重复匹配 六、位置匹配 七、使用子表达式 八、回溯引用 九、前后查找 十、嵌入条件 参考资料 一、概述 正则表达式用于文本内容的查找和替换。 正则表达式内置于其它语言或者软件产品中,它本身不是一种语言或者软件。 正则表达式在线工具 二、匹配单个字符 . 可以用来匹配任何的单个字符,但是在绝大多数实现里面,不能匹配换行符; . 是元字

  • 这部分内容可以说是学习shell脚本之前必学的内容。如果你这部分内容学的越好,那么你的shell脚本编写能力就会越强。所以不要嫌这部分内容啰嗦,也不要怕麻烦,要用心学习。一定要多加练习,练习多了就能熟练掌握了。 在计算机科学中,正则表达式是这样解释的:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模