我需要在字符串上执行Wildcard(*,?等)搜索.这就是我所做的:
string input = "Message";
string pattern = "d*";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
if (regex.IsMatch(input))
{
MessageBox.Show("Found");
}
else
{
MessageBox.Show("Not Found");
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码"发现"块正在击中,但实际上它不应该!
如果我的模式是"e*"那么只有"找到"应该命中.
我的理解或要求是d*search应该找到包含"d"的文本,后跟任何字符.
我应该将模式更改为"d.*"和"e.*"吗?在使用Regex类时,是否支持.NET for Wild Card?
我有一个通配符模式,可能是"*.txt"或"POS ??.dat".
我还有内存中的文件名列表,我需要与该模式进行比较.
我将如何做到这一点,请记住,我需要与IO.DirectoryInfo.GetFiles(模式)使用完全相同的语义.
编辑:盲目地将其转换为正则表达式将无法正常工作.
我有一个方法允许用户指定一个远程目录和一个searchPattern with with来搜索远程目录中的文件.由于我在从远程位置检索文件名时使用第三方库,因此无法利用System.IO的Directory.GetFiles()例程,该例程允许我在获取文件时指定searchPattern.
Basic String.Compare与提供的模式的文件名不匹配.有人知道更有效的匹配方式吗?
public IList<String> GetMatchingRemoteFiles(String SearchPattern, bool ignoreCase)
{
IList<String> matchingFileNames = new List<String>();
var RemoteFiles = thirdPartyTool.ftpClient.GetCurrentDirectoryContents();
foreach( String filename in RemoteFiles)
if( String.Compare(filename, SearchPattern, ignoreCase) == 0)
matchingFileNames.Add(filename);
return matchingFileNames;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.