通过这篇文章,我找到了一种获取斜杠后字符串最后一部分的方法。
我需要对此进行稍微修改:
我可以使用一个正则表达式来匹配“倒数第二个反斜杠之后的所有内容”。
我重写了原来的内容以使用反斜杠,如下所示:
([^\\]+$)
Run Code Online (Sandbox Code Playgroud)
我编写了这段代码并进行了测试
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);
}
Run Code Online (Sandbox Code Playgroud)
但由于我一直无法弄清楚“倒数第二个”要求,所以它只返回
Expected string length 19 but was 13. Strings differ at index 0.
Expected: " 0111\\interdum magn"
But was: "interdum magn"
-----------^
Run Code Online (Sandbox Code Playgroud)
我尝试{2}在否定字符之前添加一个,但没有成功。你能帮我找出剩下的部分吗?
谢谢 :-)
您可以使用
@"[^\\]+\\[^\\]+$"
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
比赛[^\\]+\\[^\\]+$
[^\\]+- 1 个或多个符号以外的符号\\\- 字面意思\[^\\]+- 1 个或多个符号以外的符号\$- 字符串末尾。在 C# 中,匹配末尾某些子字符串的更有效方法是使用RegexOptions.RightToLeft修饰符。使用它可以使正则表达式搜索更加高效。
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"
Run Code Online (Sandbox Code Playgroud)
只是在regexhero.net上比较了使用和不使用 RTL 选项的正则表达式效率: