問:我想匹配具有通配符(*和?)的模式的字符串。我知道在VB.Net中,我可以使用Like運算符來做到這一點,但我該如何在C#中做到這一點?C#中Like運算符的替代方法是什麼?
實施例VB:
Private Sub Match()
Dim testCheck As Boolean
testCheck = "apple" Like "*p?e"
End Sub
問:代碼在C#?
問:我想匹配具有通配符(*和?)的模式的字符串。我知道在VB.Net中,我可以使用Like運算符來做到這一點,但我該如何在C#中做到這一點?C#中Like運算符的替代方法是什麼?
實施例VB:
Private Sub Match()
Dim testCheck As Boolean
testCheck = "apple" Like "*p?e"
End Sub
問:代碼在C#?
在C#中,你可以使用正則表達式:
bool matches = Regex.IsMatch("apple", ".*p.e");
更換:
*
與.*
(多個字符,零或更多)
?
與.
(一個字符)
在c#中沒有這樣的操作符。
VB.NET編譯你的代碼,以下LikeOperator.LikeString
方法調用:
bool testCheck = LikeOperator.LikeString("apple", "*p?e", CompareMethod.Binary);
您可以直接調用此方法,如果你Microsoft.VisualBasic.dll
添加引用,並添加使用Microsoft.VisualBasic.CompilerServices
,但我不會建議這樣做。
您應該學習正則表達式,並使用適當的正則表達式而不是Like
運算符。相當於你的表達將是:
.*p.e
爲什麼您不會建議使用LikeOperator.LikeString?你能提供更多的信息嗎?謝謝! –
在C#中沒有Like
。使用正則表達式來獲得你想要的功能。
你可能要開始使用此介紹教程:C# Regex.Match
正如其他人所指出的那樣,這可能是對正則表達式的工作。
儘管如此,我想這可能是有趣的編寫實現這個邏輯微小的擴展方法,並具有以下想出了:
static class StringCompareExtensions
{
public static bool IsLike(this string s, string s2)
{
int matched = 0;
for (int i = 0; i < s2.Length; i++)
{
if (matched >= s.Length)
return false;
char c = s2[i];
if (c == '?')
matched++;
else if (c == '*')
{
if ((i + 1) < s2.Length)
{
char next = s2[i + 1];
int j = s.IndexOf(next, matched + 1);
if (j < 0)
return false;
matched = j;
}
else break; // '*' matches rest of s
}
else
{
if (c != s[matched])
return false;
matched++;
}
}
return (matched == s.Length);
}
}
你會使用這樣的:
string s = "12345";
Console.WriteLine(s.IsLike("1*5")); // Returns true
當然,您可以使用正則表達式編寫相同的方法,這會比上面的方法更短更簡單。
編輯:
我有一個小的時間與這個今天的發揮。我最終寫了一篇文章,介紹了幾種可以從C#中獲得Like
運算符功能的方法。該文章是Implementing VB's Like Operator in C#。
您可能必須在C#中使用正則表達式 – luke2012