C# 用CSV中的匹配项替换单词

C# 用CSV中的匹配项替换单词,c#,regex,csv,C#,Regex,Csv,因此,我有上面的代码,它搜索我的CSV文件,以匹配messageText中的每个单词。CSV文件包含textspeak缩写,每次找到匹配项时,都会将messageText中的单词替换为找到的单词。例如,“hi LOL”会在CSV中找到“LOL,大声笑”并替换它 但是,这只适用于一次更换。如果我输入“Hi-LOL”,它会输出“Hi-LOL,大声笑” 但如果我输入“嗨,哈哈,你好吗?你好吗?”它会输出“嗨,哈哈,你好吗,笑我的A**,你好吗?” 有人能告诉我哪里出了问题吗?我不明白它为什么这样做这种

因此,我有上面的代码,它搜索我的CSV文件,以匹配messageText中的每个单词。CSV文件包含textspeak缩写,每次找到匹配项时,都会将messageText中的单词替换为找到的单词。例如,“hi LOL”会在CSV中找到“LOL,大声笑”并替换它

但是,这只适用于一次更换。如果我输入“Hi-LOL”,它会输出“Hi-LOL,大声笑”

但如果我输入“嗨,哈哈,你好吗?你好吗?”它会输出“嗨,哈哈,你好吗,笑我的A**,你好吗?”


有人能告诉我哪里出了问题吗?我不明白它为什么这样做

这种方法有一些问题: 1它承担2项职责(从csv文件加载密钥/值对并替换文本)。每次调用它时,都会加载csv文件。 2就方法而言,变量“counter”看起来很奇怪

以下是重写的代码:

public void replaceText(string messageText)
    {
        int counter = 1;
        string csvFile = "textwords.csv";
        string[] words = messageText.Split(' ');
        char csvSeparator = ',';

        foreach (string word in words)
        {
            foreach (string line in File.ReadLines(csvFile))
            {
                foreach (string value in line.Replace("\"", "").Split('\r', '\n',     csvSeparator))
                    if (value.Trim() == word.Trim()) // case sensitive     
                    {
                        messageText = Regex.Replace(messageText, value, string.Empty);

                        messageText = messageText.Insert(counter, " " + line);

                    }
            }
            counter++;
        }
        MessageBox.Show(messageText);
     }
static void Main(字符串[]args){
var dictionary=LoadFromFile(“c:\textWords.csv”);
var message=“Hi LOL,LMAO”;
message=ReplaceMessage(message,dictionary);
//
}
静态字典LoadFromFile(字符串csvFile){
var dictionary=newdictionary();
var lines=File.ReadAllLines(csvFile);
foreach(行中的var行){
var fields=line.Split(',','\r','\n');
字典[字段[0].Trim()]=字段[1].Trim();
}
返回字典;
}
静态字符串替换消息(字符串消息、字典){
var words=message.Split(“”,’);
var s=新的StringBuilder();
foreach(单词中的var单词){
if(字典[单词]!=null){
s、 追加(String.Format(“{0},{1}”,单词,字典[单词]);
}否则{
s、 追加(word+);
}
}
返回s.ToString().TrimEnd(“”);
}

我无法理解这应该做什么,但在我看来,从文件中读取消息中每个单词的整个词典有点奇怪,而且你不应该使用Regex.Replace来进行简单的文本替换,如果你使用的是替换函数,您不应该也需要单独进行“插入”。您可能应该编辑您的问题,以清楚地显示输入消息、.CSV文件的内容以及输出的错误。您是对的,已经为此工作了一段时间,所以我很累,将其改为messageText=Regex.Replace(messageText,word,line);不要使用Regex.Replace,除非“word”是“正则表达式模式”。如果您只是想用messageText中的“line”替换“word”,请使用messageText.replace(word,line)
static void Main(string[] args) {
        var dictionary = LoadFromFile("c:\textWords.csv");
        var message = "Hi LOL, LMAO";
        message = ReplaceMessage(message, dictionary);
        //
    }

    static Dictionary<String, String> LoadFromFile(String csvFile) {
        var dictionary = new Dictionary<String, String>();
        var lines = File.ReadAllLines(csvFile);
        foreach (var line in lines) {
            var fields = line.Split(',', '\r', '\n');
            dictionary[fields[0].Trim()] = fields[1].Trim();
        }
        return dictionary;
    }

    static String ReplaceMessage(String message, Dictionary<String, String> dictionary) {
        var words = message.Split(' ', ',');
        var s = new StringBuilder();
        foreach (var word in words) {
            if (dictionary[word] != null) {
                s.Append(String.Format("{0}, {1} ", word, dictionary[word]));
            } else {
                s.Append(word + " ");
            }
        }
        return s.ToString().TrimEnd(' ');
    }