【发布时间】:2014-07-10 21:59:54
【问题描述】:
我已经搜索了一下,但很难判断这个确切的问题之前是否已经回答过。我知道如果这是重复的,你会告诉我的。
我有一个正则表达式,它匹配一系列一个或多个前面有反斜杠的正整数。例如:\12345 会匹配,但 \1234f 或 12345 不会匹配。
我使用的正则表达式是 ^\\(\d+)$
当我使用各种测试器测试表达式时,它可以工作。例如,参见:http://regex101.com/r/cY2bI1/1
但是,当我在下面的 c# 代码中实现它时,我找不到匹配项。
实现:
public string ParseRawUrlAsAssetNumber(string rawUrl) {
var result = string.Empty;
const string expression = @"^\\([0-9]+)$";
var rx = new Regex(expression);
var matches = rx.Matches(rawUrl);
if (matches.Count > 0)
{
result = matches[0].Value;
}
return result;
}
失败的测试(NUnit):
[Test]
public void ParseRawUrlAsAssetNumber_Normally_ParsesTheUrl() {
var f = new Forwarder();
var validRawUrl = @"\12345";
var actualResult = f.ParseRawUrlAsAssetNumber(validRawUrl);
var expectedResult = "12345";
Assert.AreEqual(expectedResult, actualResult);
}
测试的输出:
Expected string length 5 but was 6. Strings differ at index 0.
Expected: "12345"
But was: "\\12345"
-----------^
有什么想法吗?
分辨率:
感谢大家的意见。最后我根据您的建议采取了以下路线,现在已经通过测试了。
public string ParseRawUrlAsAssetNumber(string rawUrl)
{
var result = string.Empty;
const string expression = @"^\\([0-9]+)$";
var rx = new Regex(expression);
var matches = rx.Matches(rawUrl);
if (matches.Count > 0)
{
result = matches[0].Groups[1].Value;
}
return result;
}
【问题讨论】: