Skip to main content
 首页 » 编程设计

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

2024年02月05日27pander-it

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