将正则表达式从java转换为.Net

时间:2015-03-14 10:49:45

标签: java c# regex

我将项目从java转换为C#。我不知道下面的正则表达式在C#中的等价性是什么。

The regular expression : Customer rating (?<rating>\d.\d)/5.0
The java string : "Customer rating (?<rating>\\d.\\d)/5.0"

这是java代码:

private static final Pattern ratingPattern = Pattern.compile("Customer rating (?<rating>\\d.\\d)/5.0");
...
m = Retriever.ratingPattern.matcher(X);
if (m.matches()) {
...
}

它适用于(X =客户评级1.0 / 5.0)。但这是C#代码:

static Regex rx = new Regex(@"Customer rating (?<rating>\\d.\\d)/5.0");
...
MatchCollection matches = rx.Matches(X);
if (matches.Count > 0)
{
...
}

并且它不起作用(X =客户评级1.0 / 5.0)。我的意思是(Matches.count)始终为0(X =客户评级1.0 / 5.0)

如果您有任何想法,请帮助我。

谢谢

2 个答案:

答案 0 :(得分:2)

如果正则表达式存在于逐字字符串中,您不需要再次逃脱baclslash。

@"Customer rating (?<rating>\d\.\d)/5\.0"

并且还可以逃避正则表达式中存在的所有点,因为点匹配任何字符而不仅仅是字面点。

在逐字字符串中,\\d匹配文字反斜杠和字符d。因此,您的正则表达式会搜索反斜杠和文字d。因为没有,你的正则表达式失败了。

答案 1 :(得分:0)

解决方案是使用@ varbitm文字来定义regex转义序列,例如反斜杠\

所以代码是:

  Regex rx = new Regex(@"Customer rating (?<rating>\d\.\d)\/5\.0"); // <= Updated and cleaned regex

  MatchCollection matches = rx.Matches("(X=Customer rating 1.0/5.0)");

   if (matches.Count > 0)
   {
        Console.WriteLine("Matched :" );

        // Get the match output 
        foreach (Match item in matches)
        {
             Console.WriteLine(item.Value);
        }
   }

以下是regex解释:https://regex101.com/r/qS0qG3/1