我有人民国籍列表反对他们的参赛作品,大多数参赛作品都是正确的,但有些参赛作品如下: 正确的就像下面一样;
German
Iranian
Qatar
不正确就像下面一样;
可能埃塞俄比亚
黎巴嫩公民身份
DRC 和比利时国籍
(1)德国(b)阿尔及利亚
(a)俄语(b)格鲁吉亚
a)法语,b)突尼斯
印度尼西亚(截至2003年12月)
伊朗(伊朗公民身份)
出生时苏丹人
(1)俄语(2)苏联(直到1991年)
巴林(2015年1月撤销公民身份)
美利坚合众国。也被认为拥有叙利亚国籍
突尼斯(双重国籍)
(1)德语(2)摩洛哥
1)沙特阿拉伯 2)卡塔尔
a)中非共和国 b)南苏丹
伊朗国家和美国国家/公民
科威特公民身份于2002年撤销
我只需要从给定的文本中删除粗体文本(国籍)。国籍可以是任何国家,这些只是一些国家的样本。
我如何应用正则表达式或任何类型条件,以达到预期的效果。 我试图检查文本是否包含这些字符然后拆分它们。为此我需要创建更多的20个条件,这也不是很好的方法。
List<string> listOfNationalities = listOfNationalities;
List<string> multiple new List<string>();
foreach (var nationality in listOfNationalities)
{
if(nationality.Contains("(1)"))
{
string[] nat = nationality.Split(')');
foreach (var item in nat)
{
multiple.Add(item);
}
}
}
答案 0 :(得分:2)
如果国籍是由固定的可用选项列表提供的。 您可以执行以下操作:
List<string> listOfNationalities = listOfNationalities;
List<string> validNationalities = new List<string>();
validNationalities.Add("Brazilian");
validNationalities.Add("Japanese");
validNationalities.Add("...");
List<string> multiple = listOfNationalities.Where(n => validNationalities.Contains(n));
甚至更简单:
string listOfNationalities = string.Join("|",listOfNationalities);
List<string> validNationalities = new List<string>();
validNationalities.Add("Brazilian");
validNationalities.Add("Japanese");
validNationalities.Add("...");
List<string> multiple = validNationalities.Where(n => listOfNationalities.Contains(n));
通过这种方式,您将获得两个国籍。
答案 1 :(得分:0)
如果您已有一个有效国籍列表,并且如果国籍不包含特殊字符,您可以使用以下内容在运行时创建正则表达式模式:
public string NationalitiesPattern;
public string GetNationalitiesPattern()
{
List<string> listOfNationalities = // All valid nationalities.
string joinedNationalities = string.Join("|", listOfNationalities);
return $@"\b(?:{joinedNationalities})\b"; // "\b(?:German|Iranian|Qatar|etc)\b"
}
然后你可以像这样使用它:
if (string.IsNullOrEmpty(NationalitiesPattern))
NationalitiesPattern = GetNationalitiesPattern();
MatchCollection matches = Regex.Matches(inputString, NationalitiesPattern);
foreach (Match m in matches)
Console.WriteLine(m.Value);