C# 用CSV中的匹配项替换单词
因此,我有上面的代码,它搜索我的CSV文件,以匹配messageText中的每个单词。CSV文件包含textspeak缩写,每次找到匹配项时,都会将messageText中的单词替换为找到的单词。例如,“hi LOL”会在CSV中找到“LOL,大声笑”并替换它 但是,这只适用于一次更换。如果我输入“Hi-LOL”,它会输出“Hi-LOL,大声笑” 但如果我输入“嗨,哈哈,你好吗?你好吗?”它会输出“嗨,哈哈,你好吗,笑我的A**,你好吗?”C# 用CSV中的匹配项替换单词,c#,regex,csv,C#,Regex,Csv,因此,我有上面的代码,它搜索我的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(' ');
}