To match strings using wildcards in C# and VB.NET you can use the following snippet.
It will internally convert the wildcard string to a Regex.
The Console-Output of this sample will be:
C:\Test\myFile01.xml
C:\Test\myFile02.xml
Sample C#
#region
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
#endregion
namespace de.fesslersoft.RegexWildCard
{
internal class Program
{
private static void Main(string[] args)
{
var fileList = new List<String>();
fileList.Add(@"C:\Test\myFile01.xml");
fileList.Add(@"C:\Test\myFile02.xml");
fileList.Add(@"C:\Test\myFolder01.xml");
fileList.Add(@"C:\Test\myFolder02.xml");
var wildCard = new Wildcard("*File*.xml", RegexOptions.IgnoreCase);
foreach (var file in fileList.Where(file => wildCard.IsMatch(file)))
{
Console.WriteLine(file);
}
Console.Read();
}
}
public class Wildcard : Regex
{
public Wildcard(string pattern) : base(ToRegex(pattern))
{
}
public Wildcard(string pattern, RegexOptions options) : base(ToRegex(pattern), options)
{
}
public static string ToRegex(string pattern)
{
return "^" + Escape(pattern).Replace("\\*", ".*").Replace("\\?", ".") + "$";
}
}
}
Sample VB.NET (autoconverted)
#Region ""
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text.RegularExpressions
#End Region
Namespace de.fesslersoft.RegexWildCard
Friend Class Program
Private Shared Sub Main(args As String())
Dim fileList = New List(Of [String])()
fileList.Add("C:\Test\myFile01.xml")
fileList.Add("C:\Test\myFile02.xml")
fileList.Add("C:\Test\myFolder01.xml")
fileList.Add("C:\Test\myFolder02.xml")
Dim wildCard = New Wildcard("*File*.xml", RegexOptions.IgnoreCase)
For Each file As var In fileList.Where(Function(file) wildCard.IsMatch(file))
Console.WriteLine(file)
Next
Console.Read()
End Sub
End Class
Public Class Wildcard
Inherits Regex
Public Sub New(pattern As String)
MyBase.New(ToRegex(pattern))
End Sub
Public Sub New(pattern As String, options As RegexOptions)
MyBase.New(ToRegex(pattern), options)
End Sub
Public Shared Function ToRegex(pattern As String) As String
Return "^" + Escape(pattern).Replace("\*", ".*").Replace("\?", ".") + "$"
End Function
End Class
End Namespace