我正在使用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)
是这三种解决方案中最有效的解决方案。
答案 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