我有一个数组
string [] country = {"IND", "RSA", "NZ", "AUS", "WI", "SL", "ENG", "BAN"};
我有一个字符串
downloadString = "The match between India (IND) and Australia (AUS) is into its exciting phase. South Africa (RSA) won the match against England (ENG) "
所以我试图找到字符串中存在哪些数组元素。我能够发现字符串中存在IND
,RSA
,AUS
和ENG
。但是,我无法根据它们在字符串中的出现来对它们进行排序。所以我现在的输出是
IND, RSA, AUS, ENG
然而,我真正需要的是
IND, AUS, RSA, ENG
我该怎么做?
答案 0 :(得分:4)
另一种可能性是使用具有以下模式的正则表达式:
\b(IND|RSA|NZ|AUS|WI|SL|ENG|BAN)\b
示例代码:(未经测试)
MatchCollection matches= System.Text.RegularExpresssion.Regex.Matches(yourStringSample, patternHere);
for each (Match m in matches)
{
Debug.Print(m.ToString())
}
希望它有所帮助!
修改强>
基于下面的评论,我应该强调正则表达式模式应该使用类似的代码构建,如下所示:(如JLRishe所建议)
string pattern = "(" + string.Join("|", country.Select(c => Regex.Escape(c))) + ")"
答案 1 :(得分:3)
您可以使用Linq查询(我已将原始数组重命名为countries
)简洁地执行此操作:
var result = countries.Select(country => new { country,
index = downloadString.IndexOf(country)})
.Where(pair => pair.index >= 0)
.OrderBy(pair => pair.index)
.Select(pair => pair.country)
.ToArray();
结果为IND, AUS, RSA, ENG
。
答案 2 :(得分:0)
您可以搜索字符串并保留找到的项目的位置,然后根据它们在字符串中的位置对它们进行排序。您可能需要一个结构数组来保留标签和位置,而不是国家/地区阵列!