使用 RegEx 从字符串中删除特殊字符
Removing special characters from a string with RegEx
正在读取包含单词、数字和特殊字符的文本文件,我想删除某些特殊字符,例如:[](),'
我有这个代码,但它不起作用!
using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt")) {
string line = reader.ReadToEnd ();
Regex rgx = new Regex ("[^[]()',]");
string res = rgx.Replace (line, "");
Message1.text = res;
}
我错过了什么,谢谢
一次替换一个 String.Replace:
using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt"))
{
string line = reader.ReadToEnd ();
string res = line.Replace(line, "[", "");
res = res.Replace(line, "]", "");
res = res.Replace(line, "(", "");
res = res.Replace(line, ")", "");
res = res.Replace(line, "'", "");
res = res.Replace(line, ",", "");
Message1.text = res;
}
正则表达式中的一些字符,特别是 [ ] ( ) ^
,保持 special meaning in Regex 并且为了按字面意义使用它们,它们必须被转义。
使用以下正确转义的正则表达式:
Regex rgx = new Regex (@"[\^\[\]\(\)',]");
请注意,必须使用 @
逐字字符串,因为我们不想从字符串 中转义这些字符 ,只能从正则表达式中转义。
或者,双重转义反斜杠:
Regex rgx = new Regex ("[\^\[\]\(\)',]");
但在这种情况下可读性较差。
您可以跳过 Regex,只维护一个要删除的字符列表,然后替换旧的方式:
string[] specialCharsToRemove = new [] { "[", "]", "(", ")", "'", "," };
using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt"))
{
string line = reader.ReadToEnd();
foreach(string s in specialCharsToRemove)
{
line = line.Replace(s, string.Empty);
}
Message1.text = res;
}
理想情况下,这将采用自己的方法,如下所示:
private static string RemoveCharacters(string input, string[] specialCharactersToRemove)
{
foreach(string s in specialCharactersToRemove)
{
input = input.Replace(s, string.Empty);
}
return input;
}
我做了一个fiddlehere
我同意为此避免使用正则表达式,但我也不会多次使用 string.Replace。
考虑实现接受要替换的字符数组的 Replace 或 Remove 方法,并且只扫描输入字符串一次。例如:
var builder = new StringBuilder();
foreach (char ch in input)
{
if (!chars.Contains(ch))
{
builder.Append(ch):
}
}
return builder.ToString();
正在读取包含单词、数字和特殊字符的文本文件,我想删除某些特殊字符,例如:[](),'
我有这个代码,但它不起作用!
using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt")) {
string line = reader.ReadToEnd ();
Regex rgx = new Regex ("[^[]()',]");
string res = rgx.Replace (line, "");
Message1.text = res;
}
我错过了什么,谢谢
一次替换一个 String.Replace:
using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt"))
{
string line = reader.ReadToEnd ();
string res = line.Replace(line, "[", "");
res = res.Replace(line, "]", "");
res = res.Replace(line, "(", "");
res = res.Replace(line, ")", "");
res = res.Replace(line, "'", "");
res = res.Replace(line, ",", "");
Message1.text = res;
}
正则表达式中的一些字符,特别是 [ ] ( ) ^
,保持 special meaning in Regex 并且为了按字面意义使用它们,它们必须被转义。
使用以下正确转义的正则表达式:
Regex rgx = new Regex (@"[\^\[\]\(\)',]");
请注意,必须使用 @
逐字字符串,因为我们不想从字符串 中转义这些字符 ,只能从正则表达式中转义。
或者,双重转义反斜杠:
Regex rgx = new Regex ("[\^\[\]\(\)',]");
但在这种情况下可读性较差。
您可以跳过 Regex,只维护一个要删除的字符列表,然后替换旧的方式:
string[] specialCharsToRemove = new [] { "[", "]", "(", ")", "'", "," };
using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt"))
{
string line = reader.ReadToEnd();
foreach(string s in specialCharsToRemove)
{
line = line.Replace(s, string.Empty);
}
Message1.text = res;
}
理想情况下,这将采用自己的方法,如下所示:
private static string RemoveCharacters(string input, string[] specialCharactersToRemove)
{
foreach(string s in specialCharactersToRemove)
{
input = input.Replace(s, string.Empty);
}
return input;
}
我做了一个fiddlehere
我同意为此避免使用正则表达式,但我也不会多次使用 string.Replace。
考虑实现接受要替换的字符数组的 Replace 或 Remove 方法,并且只扫描输入字符串一次。例如:
var builder = new StringBuilder();
foreach (char ch in input)
{
if (!chars.Contains(ch))
{
builder.Append(ch):
}
}
return builder.ToString();