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

本文关键字:字符串 组合 正则表达式 | 更新日期: 2023-09-27 17:54:34

我对使用regex相当陌生,而且我还不完全清楚所有的语法。基本上,我被困在一段代码上,我有:

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

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

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

您的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 
} 

在这种情况下,您实际上不应该使用正则表达式,事实上,这可能会使目标过于复杂。

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上研究一下,它有一些可靠的资源。