Java Matcher.find和Matcher.group的C#/ .NET等价物

时间:2016-05-10 10:51:22

标签: java c# matcher

我已经看到有一些关于Java Matcher类的帖子,但是我无法找到关于特定方法find()group()的帖子。

我有这段代码,其中已经定义了Lane和IllegalLaneException:

private int getIdFromLane(Lane lane) throws IllegalLaneException {
    Matcher m = pattern.matcher(lane.getID());
    if (m.find()) {
        return Integer.parseInt(m.group());
    } else {
        throw new IllegalLaneException();
    }
}

查看Java文档,我们有以下内容:

find() - 尝试查找与模式匹配的输入序列的下一个子序列。

group() - 返回上一场比赛匹配的输入子序列。

我的问题是,这相当于C#中的方法find()group()

编辑:我忘了说我正在使用MatchCollection类和Regex

C#代码:

private static Regex pattern = new Regex("\\d+$"); // variable outside the method

private int getIdFromLane(Lane lane) //throws IllegalLaneException
{
    MatchCollection m = pattern.Matches(lane.getID());
...
}

1 个答案:

答案 0 :(得分:1)

在C#上你将使用Regex。正则表达式类有一个名为" Matches"这将返回模式的所有重合匹配。

每个Match都有一个名为Groups的属性,其中存储了捕获的组。

所以,找到 - > Regex.Matches,group - > Match.Groups。

他们不是直接的等价物,但他们会给你相同的功能。

这是一个简单的例子:

var reg = new Regex("(\\d+)$");

var matches = reg.Matches("some string 0123");

List<string> found = new List<string>();

if(matches != null)
{
    foreach(Match m in matches)
        found.Add(m.Groups[1].Value);
}

//do whatever you want with found

请记住,m.Groups [0]将包含完整的捕获,任何后续的组都将被捕获。

此外,如果您只期望一个结果,那么您可以使用.Match:

var match = reg.Match("some string 0123");

if(match != null && match.Success)
    //Process the Groups as you wish.