首页 > 解决方案 > 正则表达式命名捕获组

问题描述

我已经成功编写了一个正则表达式模式来获取一些价值,它真的很棒,但我不知道如何命名捕获组。

这是我的字符串:

<div class="pipe-mailbody pipe-mailbody-2cccfb01-75f1-4fc0-9d5f-5f5ed8729d1b">Deal ID:<br>256<br><br>Deal pipeline ID:<br>3<br><br>Deal stage ID:<br>16<br><br>Deal contact person ID:<br>740<br><br>End:</div>

这是我的模式:

Deal\sID\:\<br\>([\d]+)\<br\>[\<\>\d\w\s]+\:\<br\>([\d]+)<br><br>Deal\sstage\sID:<br\>([\d]+)<br\>[\d\s\>\<\S]+person\sID\:\<br>([\d]+)\<br\>

谁能帮我如何命名捕获组?就像([\d]+)这是捕获组之一,我想命名它person

我怎样才能实现它?

标签: regex

解决方案


好的,我不确定这是否是您正在寻找的,但希望这会有所帮助。

您可以Pattern Matcher在 Java 中使用类似 a 的东西来获取值。Java 中的Pattern对象允许您编译正则表达式模式。然后该Matcher对象从某个字符串中获取该模式的所有匹配项。group您可以使用对象的方法获取捕获组Matcher

如果这是你的字符串:

<div class="pipe-mailbody pipe-mailbody-2cccfb01-75f1-4fc0-9d5f-5f5ed8729d1b">Deal ID:<br>256<br><br>Deal pipeline ID:<br>3<br><br>Deal stage ID:<br>16<br><br>Deal contact person ID:<br>740<br><br>End:</div>

使用 Java,您可以这样做(作为说明,我还简化了您的模式,因为有许多不必要的转义字符):

String input = "<div class="pipe-mailbody pipe-mailbody-2cccfb01-75f1-4fc0-9d5f-5f5ed8729d1b">Deal ID:<br>256<br><br>Deal pipeline ID:<br>3<br><br>Deal stage ID:<br>16<br><br>Deal contact person ID:<br>740<br><br>End:</div>";

Pattern p = Pattern.compile("Deal\sID:<br>(\d+)<br>.+:<br>(\d+)<br><br>Deal\sstage\sID:<br>(\d+)<br>.+person\sID:<br>(\d+)<br>";

Matcher m = p.match(input);

String person = m.group(4);

这会将人员 ID 保存在字符串变量中。


推荐阅读