C# Regex将国籍与文本分开
我有一份关于参赛者国籍的清单,大部分参赛者都给出了正确的答案,但有些参赛者的答案如下:; 正确的如下所示C# Regex将国籍与文本分开,c#,regex,C#,Regex,我有一份关于参赛者国籍的清单,大部分参赛者都给出了正确的答案,但有些参赛者的答案如下:; 正确的如下所示 German Iranian Qatar 不适当的情况如下 German Iranian Qatar 可能是埃塞俄比亚人 (国籍前的案文) 黎巴嫩公民身份 (国籍后案文) 刚果和比利时国籍 (国籍加入和) (1) 德国(b)阿尔及利亚 (以1和b作为分隔符) (a) 俄语(b)格鲁吉亚 (带a和b分离器) a) 法语,b)突尼斯语 (带a和b分离器) 印度尼西亚语
German
Iranian
Qatar
不适当的情况如下
German
Iranian
Qatar
可能是埃塞俄比亚人
- (国籍前的案文)
- (国籍后案文)
- (国籍加入和)
- (以1和b作为分隔符)
- (带a和b分离器)
- (带a和b分离器)
- (国籍后另加案文)
- (国籍后另一案文)
- (国籍后另一案文)
- (第二项后的文本)
- (又是不同的文本)
- (包含国籍的描述性文本)
- (不同文本)
- (带()双括号的1和2)
- (带括号的1和2)
- (带单括号)
- (文本中包含国籍,并与和连接)
- (另一文本)
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);
}
}
}
listOfNationalities=listOfNationalities;
列出多个新列表();
foreach(国家列表中的var国籍)
{
如果(国籍包含(“(1)”)
{
字符串[]nat=national.Split(');
foreach(nat中的var项)
{
多个。添加(项);
}
}
}
如果国籍由可用选项的固定列表提供。
您可以执行以下操作:
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));
listOfNationalities=listOfNationalities;
列表有效性=新列表();
有效国籍。添加(“巴西”);
有效国籍。添加(“日语”);
有效性。添加(“…”);
List 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));
string listOfNationalities=string.Join(“|”,listOfNationalities);
列表有效性=新列表();
有效国籍。添加(“巴西”);
有效国籍。添加(“日语”);
有效性。添加(“…”);
List multiple=validNationalities.Where(n=>listOfNationalities.Contains(n));
这样,您将获得给定的两个国籍。如果国籍由可用选项的固定列表提供。 您可以执行以下操作:
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));
listOfNationalities=listOfNationalities;
列表有效性=新列表();
有效国籍。添加(“巴西”);
有效国籍。添加(“日语”);
有效性。添加(“…”);
List 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));
string listOfNationalities=string.Join(“|”,listOfNationalities);
列表有效性=新列表();
有效国籍。添加(“巴西”);
有效国籍。添加(“日语”);
有效性。添加(“…”);
List multiple=validNationalities.Where(n=>listOfNationalities.Contains(n));
通过这种方式,您将获得给定的两个国籍。如果您已经有一个有效国籍的列表,并且如果国籍不包括特殊字符,那么您可以在运行时使用类似以下的方法来创建正则表达式模式:
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"
}
如果您已经有一个有效国籍的列表,并且国籍不包括特殊字符,那么您可以在运行时使用类似于以下的方法来创建正则表达式模式:
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"
}
根据要分析的文本量、频率和性能要求,拥有多个正则表达式可能是一个非常好的解决方案,因为它更易于阅读和维护。您是否已经有一个正则表达式(因为如果您有一个国家列表,我想您不需要正则表达式)@charlesLgn不我没有任何正则表达式为什么你认为你需要使用正则表达式?如果您有国籍列表,只需检查您的字符串是否包含“NationalitiesList”中的国籍之一。@SeM我认为正则表达式会根据要分析的文本量、频率和性能要求限制代码的长度,拥有多个正则表达式可能是一个很好的解决方案,因为它更易于阅读和维护。您是否已经有一个正则表达式(因为如果您有一个国籍列表,我认为您不需要正则表达式)@charlesLgn否我没有任何正则表达式为什么您认为需要使用正则表达式?如果你有