正则表达式用于匹配倒数第二个反斜杠之后的所有内容

Jes*_*olm 2 c# regex

通过这篇文章,我找到了一种获取斜杠后字符串最后一部分的方法。

我需要对此进行稍微修改:

我可以使用一个正则表达式来匹配“倒数第二个反斜杠之后的所有内容”。

我重写了原来的内容以使用反斜杠,如下所示:

([^\\]+$)
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}在否定字符之前添加一个,但没有成功。你能帮我找出剩下的部分吗?

谢谢 :-)

Wik*_*żew 7

您可以使用

@"[^\\]+\\[^\\]+$"
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

比赛[^\\]+\\[^\\]+$

  • [^\\]+- 1 个或多个符号以外的符号\
  • \\- 字面意思\
  • [^\\]+- 1 个或多个符号以外的符号\
  • $- 字符串末尾。

在 C# 中,匹配末尾某些子字符串的更有效方法是使用RegexOptions.RightToLeft修饰符。使用它可以使正则表达式搜索更加高效。

C# 演示

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 选项的正则表达式效率:

在此输入图像描述