如何将正则表达式与字符串组合?

时间:2014-03-28 22:44:25

标签: c# regex

我使用正则表达式相当新,我还不完全清楚所有内容的语法。基本上我被困在一些我所拥有的代码上:

if(@"\d{2,}\s"+string == Path.GetFileNameWithoutExtension(dir)) 
{ 
    do stuff 
} 

我的问题是它不会匹配任何东西。我基本上有一堆文件正在搜索,它们都有2个数字和一个空格,然后是用户正在搜索的名称。我可以像这样组合正则表达式+字符串,还是我的正则表达式/语句的问题?为了清楚起见,当我实际从文件中删除两位数和空格时,它将匹配。如果问题很明显,我很抱歉,我只玩了几天的正则表达式......

2 个答案:

答案 0 :(得分:3)

您的if语句未尝试匹配正则表达式模式,它只是比较两个字符串。这就是Regex.IsMatch方法的用途。此外,您可能希望使用Regex.Escape将正则表达式模式与任意字符串组合。

试试这个:

using System.Text.RegularExpressions;

...

var pattern = @"\d{2,}\s" + Regex.Escape(myString);
var fileName = Path.GetFileNameWithoutExtension(dir);
if (Regex.IsMatch(fileName, pattern))
{ 
    // do stuff 
} 

答案 1 :(得分:0)

你实际上不应该在该实例中使用正则表达式,事实上这可能会使目标过于复杂。

string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string [] file = Directory.GetFiles(path, @"11_*.txt", SearchOption.AllDirectories);
foreach(string f in file)
{
    // Do Something.
}

如果您的完全耳机使用正则表达式,您可以按照以下方式执行更多操作:

using System.Text.RegularExpressions;

...

    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    var file = Regex.IsMatch(path, @"\d{2,}\2");
    if(file == true)
    {
         // Do Something
    }

这是使用正则表达式的一种方法,使用Linq可以更强大。我强烈建议在MSDN上研究这个,它有一些可靠的资源。