使用正则表达式搜索字符串

时间:2013-12-31 02:21:52

标签: c# .net regex algorithm

我正在使用C#,我对正则表达式完全不熟悉。我已经了解了+ * ? \d等基本操作符。问题是假设给出了一个字符串:

  

C:\用户\ PRATIK \桌面\的abc.txt

我想使用Regex在最后一个'\'之后搜索字符串的一部分。即仅“abc.txt”。 目前我正在使用这种机制: -

    string input = @"C:\Users\Pratik\Desktop\abc.txt" ; 
    string[] inputSplit = input.split('\\');
    int length = inputsplit.Length ;
    Regex.isMatch(inputSplit[length-1], pattern) ; 
   // pattern is any pattern you want to search for.

使用正则表达式有没有更有效的方法? 因为,人们给了我另一个Path.GetFileName(input)的解决方案。 我尝试使用GetFileName方法以及上面提到的代码来测量执行上述任务所花费的时间,结果如下:

My method: 3323 milliseconds
Path.GetFileName: 1763 milliseconds
after using Regex: 2563 milliseonds

因此,Path.GetFileName(input)是这三种解决方案中最有效的解决方案。

4 个答案:

答案 0 :(得分:2)

不是正则表达式解决方案..但这可以满足您的需求:

using System.IO;

var fileName = Path.GetFileName(path);

答案 1 :(得分:1)

  

使用正则表达式有没有更有效的方法?

不确定更有效率,我目前无法进行基准测试。但更简单。

string input = @"C:\Users\Pratik\Desktop\abc.txt";
Match match  = Regex.Match(input, @"[^\\]+$");
Console.WriteLine(match.Value); // "abc.txt"

正则表达式:

[^\\]+         any character except: '\\' (1 or more times)
$              before an optional \n, and the end of the string

虽然,我建议使用Path类来执行文件或目录路径信息。

答案 2 :(得分:1)

仅供参考使用正则表达式:

string input = @"C:\Users\Pratik\Desktop\abc.txt";
string pattern = @".*\\(.*)";
Match match = Regex.Match(input, pattern);
string result = match.Groups[1].Value;

但请,请使用其他解决方案(Path.GetFileName)!

.*\\(.*)的含义:

  • .*:匹配任何字符,请注意:this is greedy,表示它将匹配下一个正则表达式部分的任何内容
  • \\:一个文字\字符(你需要逃脱,因为它在正则表达式中很特殊)
    (如果您没有使用逐字字符串(\\\\
  • ,则必须写@""
  • (.*)匹配反斜杠后的任何内容并将其放入capturing group

答案 3 :(得分:0)

输入字符串:

  

C:\用户\ PRATIK \桌面\的abc.txt

     

123ABC \ ABC \ ABCX

这个正则表达式

[^\\]+$

将匹配

  

的abc.txt

     

ABCX