C# 如何从字符串中删除字符(列表中的字符除外)
这是我的字符串值:C# 如何从字符串中删除字符(列表中的字符除外),c#,regex,list,replace,character,C#,Regex,List,Replace,Character,这是我的字符串值: string str = "32 ab d32"; 此列表是我允许的字符: var allowedCharacters = new List<string> { "a", "b", "c", "2", " " }; 我想用一个空格替换不在允许字符列表中的任何字符。不带正则表达式: IEnumerable<Char> allowed = srVariable .Select(c => lstAllowedCharacters.Conta
string str = "32 ab d32";
此列表是我允许的字符:
var allowedCharacters = new List<string> { "a", "b", "c", "2", " " };
我想用一个空格替换不在允许字符列表中的任何字符。不带正则表达式:
IEnumerable<Char> allowed = srVariable
.Select(c => lstAllowedCharacters.Contains(c.ToString()) ? c : ' ');
string result = new string(allowed.ToArray());
IEnumerable allowed=srVariable
.Select(c=>lstalowedcharacters.Contains(c.ToString())?c:“”);
字符串结果=新字符串(allowed.ToArray());
不带正则表达式:
IEnumerable<Char> allowed = srVariable
.Select(c => lstAllowedCharacters.Contains(c.ToString()) ? c : ' ');
string result = new string(allowed.ToArray());
IEnumerable allowed=srVariable
.Select(c=>lstalowedcharacters.Contains(c.ToString())?c:“”);
字符串结果=新字符串(allowed.ToArray());
为什么不使用?为什么不使用?试试这个:
string srVariable = "32 ab d32";
List<string> lstAllowedCharacters = new List<string> { "a", "b", "c", "2", " " };
srVariable = Regex.Replace(srVariable, "[^" + Regex.Escape(string.Join("", lstAllowedCharacters) + "]"), delegate(Match m)
{
if (!m.Success) { return m.Value; }
return " ";
});
Console.WriteLine(srVariable);
string srVariable=“32 ab d32”;
List lstalowedcharacters=新列表{“a”、“b”、“c”、“2”、“2”);
srVariable=Regex.Replace(srVariable,[^“+Regex.Escape(string.Join(“,lstalowedcharacters)+“]),委托(匹配m)
{
如果(!m.Success){返回m.Value;}
返回“”;
});
Console.WriteLine(srVariable);
试试这个:
string srVariable = "32 ab d32";
List<string> lstAllowedCharacters = new List<string> { "a", "b", "c", "2", " " };
srVariable = Regex.Replace(srVariable, "[^" + Regex.Escape(string.Join("", lstAllowedCharacters) + "]"), delegate(Match m)
{
if (!m.Success) { return m.Value; }
return " ";
});
Console.WriteLine(srVariable);
string srVariable=“32 ab d32”;
List lstalowedcharacters=新列表{“a”、“b”、“c”、“2”、“2”);
srVariable=Regex.Replace(srVariable,[^“+Regex.Escape(string.Join(“,lstalowedcharacters)+“]),委托(匹配m)
{
如果(!m.Success){返回m.Value;}
返回“”;
});
Console.WriteLine(srVariable);
正则表达式?Regex对于你想要完成的事情来说可能有些过分了
这里是没有正则表达式的另一个变体(将您的lstalowedcharacters
修改为可枚举的字符,而不是字符串[正如变量名所暗示的那样]:
String original=“32 ab d32”;
Char replacementChar='';
IEnumerable allowedChars=new[]{'a','b','c','2','';
字符串结果=新字符串(
original.Select(x=>!allowedChars.Contains(x)?replacementChar:x.ToArray()
);
正则表达式?Regex对于你想要完成的事情来说可能有些过分了
这里是没有正则表达式的另一个变体(将您的lstalowedcharacters
修改为可枚举的字符,而不是字符串[正如变量名所暗示的那样]:
String original=“32 ab d32”;
Char replacementChar='';
IEnumerable allowedChars=new[]{'a','b','c','2','';
字符串结果=新字符串(
original.Select(x=>!allowedChars.Contains(x)?replacementChar:x.ToArray()
);
以下是每个解决方案的一个简单但高效的解决方案:
Hashset<char> lstAllowedCharacters = new Hashset<char>{'a','b','c','2',' '};
var resultStrBuilder = new StringBuilder(srVariable.Length);
foreach (char c in srVariable)
{
if (lstAllowedCharacters.Contains(c))
{
resultStrBuilder.Append(c);
}
else
{
resultStrBuilder.Append(" ");
}
}
srVariable = resultStrBuilder.ToString();
Hashset lstalowedcharacters=新的Hashset{'a','b','c','2','''};
var resultStrBuilder=新的StringBuilder(srVariable.Length);
foreach(srVariable中的字符c)
{
if(lstalowedcharacters.Contains(c))
{
结果trbuilder.Append(c);
}
其他的
{
resultStrBuilder.Append(“”);
}
}
srVariable=resultStrBuilder.ToString();
以下是每个解决方案的一个简单但高效的解决方案:
Hashset<char> lstAllowedCharacters = new Hashset<char>{'a','b','c','2',' '};
var resultStrBuilder = new StringBuilder(srVariable.Length);
foreach (char c in srVariable)
{
if (lstAllowedCharacters.Contains(c))
{
resultStrBuilder.Append(c);
}
else
{
resultStrBuilder.Append(" ");
}
}
srVariable = resultStrBuilder.ToString();
Hashset lstalowedcharacters=新的Hashset{'a','b','c','2','''};
var resultStrBuilder=新的StringBuilder(srVariable.Length);
foreach(srVariable中的字符c)
{
if(lstalowedcharacters.Contains(c))
{
结果trbuilder.Append(c);
}
其他的
{
resultStrBuilder.Append(“”);
}
}
srVariable=resultStrBuilder.ToString();
@des谢谢我忘了编码:D@des谢谢,我忘记了编码:Dnope我希望它替换预定义列表中没有的字符,而不是像您显示的那样定义它们。我已经调整了我的答案,但是请注意模式中的否定字符^
。结果确实返回您要求的“2 ab 2”
。可能需要在插入正则表达式之前调用。请替换调用以避免任何无效字符。结果是:Regex.Replace(srVariable,String.Format(“[^{0}]”,Regex.Escape(String.Join(String.Empty,lstalowedcharacters)))
nope我希望它替换预定义列表中没有的字符,而不是像您显示的那样定义它们。我已经调整了答案,但是请注意模式中的否定字符^
。结果确实返回您要求的“2 ab 2”
。可能需要在插入正则表达式之前调用。请替换调用以避免任何无效字符。结果是:Regex.Replace(srVariable,String.Format(“[^{0}]”),Regex.Escape(String.Join(String.Empty,lstalowedcharacters)))
@MonsterMMORPG:取决于实现。字符串列表可能会失败(因为即使字符串被接受,Tim实际上只是在逐个字符进行比较)。它们都做相同的事情,我只是让它更明确地比较什么。@MonsterMMORPG:取决于实现。字符串列表可能会失败(因为即使字符串被接受,Tim实际上只是在逐个字符进行比较)。它们都是一样的,我只是让它更清楚地说明所比较的是什么。