我有很長串S可能包含模式的字符串p1, p2, p3, ....;
Linq的語句獲取未串長串
所有模式置於MatchCollection
對象
我想做些什麼像
string ret=p_n if !(S.Contains(p_n))
我寫一個循環做到這一點
foreach(string p in PatternList)
{
s=(!S.contain(p.valus))?p.value:"";
}
我想知道一個LINQ聲明使我的cocde更加優雅。
我有很長串S可能包含模式的字符串p1, p2, p3, ....;
Linq的語句獲取未串長串
所有模式置於MatchCollection
對象
我想做些什麼像
string ret=p_n if !(S.Contains(p_n))
我寫一個循環做到這一點
foreach(string p in PatternList)
{
s=(!S.contain(p.valus))?p.value:"";
}
我想知道一個LINQ聲明使我的cocde更加優雅。
var patterns = new List<string> { "one", "two", "three" };
var misses = patterns.Where(s => !longString.Contains(s));
class Program
{
static void Main(string[] args)
{
string S = "12345asdfasdf12w3e412354w12341523142341235123";
string patternString = "one1234554321asdf";
MatchCollection p_ns = Regex.Matches(patternString, "one|12345|54321|asdf");
var nonMatches = (from p_n in p_ns.Cast<Match>()
where !S.Contains(p_n.Value)
select p_n.Value);
foreach (string nonMatch in nonMatches)
{
Console.WriteLine(nonMatch);
}
Console.ReadKey();
}
}
或者用Justin的方法,從他的回答,你也可以使用下面的變化。
class Program
{
static void Main(string[] args)
{
string S = "12345asdfasdf12w3e412354w12341523142341235123";
string patternString = "one1234554321asdf";
MatchCollection p_ns = Regex.Matches(patternString, "one|12345|54321|asdf");
var nonMatches = p_ns.Cast<Match>().Where(s => !S.Contains(s.Value));
foreach (Match nonMatch in nonMatches)
{
Console.WriteLine(nonMatch.Value);
}
Console.ReadKey();
}
}
static void Main(string[] args)
{
string S = "p1, p2, p3, p4, p5, p6";
List<string> PatternList = new List<string>();
PatternList.Add("p2");
PatternList.Add("p5");
PatternList.Add("p9");
foreach (string s in PatternList.Where(x => !S.Contains(x)))
{
Console.WriteLine(s);
}
Console.ReadKey();
}
爲了澄清,你想匹配的模式列表中,最後一場比賽,或者列表matchcollection的返回一串「」對非匹配,匹配值的大小比賽? – deepee1
我認爲你的問題標題有點誤導。您指出所有模式都放在MatchCollection中,但要求使用LINQ語句來檢查不是標題中較長字符串的一部分的字符串。問題正文中的p.valus表示您真的在查看來自MatchCollection的Match,而不是不是長字符串的子字符串的字符串。 –