在阅读包含字词,数字和特殊字符的文字文件时,我想删除某些特殊字符,例如:[](),'
我有这段代码,但它无效!
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;
}
我错过了什么,谢谢
答案 0 :(得分:3)
正则表达式中的某些字符,特别是[ ] ( ) ^
,持有special meaning in Regex,为了在字面上使用它们,必须将它们转义。
使用以下正确转义的Regex:
Regex rgx = new Regex (@"[\^\[\]\(\)',]");
请注意,必须使用@
逐字字符串,因为我们不想从字符串中转义这些字符,只能从正则表达式中转义。
或者,双重逃避反斜杠:
Regex rgx = new Regex ("[\\^\\[\\]\\(\\)',]");
但在这种情况下,这种可读性较差。
答案 1 :(得分:1)
您可以跳过正则表达式并只保留要删除的字符列表,然后替换旧方式:
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;
}
我做了一个小提琴here
答案 2 :(得分:0)
使用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;
}
答案 3 :(得分:0)
我同意避免使用正则表达式,但我也不会多次使用string.Replace。
考虑实现一个Replace或Remove方法,该方法接受要替换的字符数组,并仅扫描输入字符串一次。例如:
var builder = new StringBuilder();
foreach (char ch in input)
{
if (!chars.Contains(ch))
{
builder.Append(ch):
}
}
return builder.ToString();