我将项目从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)
如果您有任何想法,请帮助我。
谢谢
答案 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