通过this post我找到了一种获取斜线后字符串最后一部分的方法。
我需要对此稍作修改:
我可以使用匹配“倒数第二个反斜杠后的所有内容”的正则表达式。
我重写了原文以使用反斜杠,如下所示:
([^\\]+$)
我编写了这段代码并进行了测试
public static string TrimTrail(this string value, string pattern)
{
var regEx = new Regex(pattern);
var result = regEx.Match(value);
return result.Value;
}
[Test]
public void TestOfTrimmingTrail()
{
//Arrange
var stringToTest = @"0001 Lorem ipsum dolor sit\011 tortor neque\ 0111\interdum magn";
var pattern = @"([^\\]+$)";
//Act
var result = stringToTest.TrimTrail(pattern);
//Assert
Assert.AreEqual(" 0111\\interdum magn", result);
}
但是由于我还没有搞清楚“倒数第二个”的要求,所以它只返回
Expected string length 19 but was 13. Strings differ at index 0.
Expected: " 0111\\interdum magn"
But was: "interdum magn"
-----------^
我尝试在否定字符前添加 {2},但没有成功。 你能帮我算出剩下的部分吗?
谢谢:-)
请您参考如下方法:
你可以使用
@"[^\\]+\\[^\\]+$"
参见 regex demo
[^\\]+\\[^\\]+$ 匹配
[^\\]+-\ 以外的 1 个或多个符号
\\- 文字\[^\\]+-\ 以外的 1 个或多个符号
$- 字符串结尾。
在 C# 中,在末尾匹配某些子字符串的更有效方法是使用 RegexOptions.RightToLeft 修饰符。使用它可以提高此正则表达式搜索的效率。
C# demo :
var line = @"0001 Lorem ipsum dolor sit\011 tortor neque\ 0111\interdum magn";
var pattern = @"[^\\]+\\[^\\]+$";
var result = Regex.Match(line, pattern, RegexOptions.RightToLeft);
if (result.Success)
Console.WriteLine(result.Value); // => " 0111\interdum magn"
只是在 regexhero.net 比较了有和没有 RTL 选项的正则表达式效率:
