【发布时间】:2013-11-21 21:54:35
【问题描述】:
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);
}
所以我有了上面的代码,它会搜索我的 CSV 文件以匹配 messageText 中的每个单词。 CSV 文件包含 textspeak 缩写,每次找到匹配项时,都会将 messageText 中的单词替换为找到的单词。例如,“hi LOL”会在 CSV 中找到“LOL,Laugh out loud”并替换它
但是,这仅适用于一次替换。如果我输入“Hi LOL”,它会输出“Hi LOL,Laugh out Loud”
但如果我输入“Hi LOL,你好吗?LMAO”,它会输出“Hi LOL LMFAO,笑死我的 A**,你好吗?”
谁能告诉我哪里出错了,我不知道为什么会这样
【问题讨论】:
-
我无法理解这应该做什么,但在我看来,从文件中为消息中的每个单词读取整个字典有点奇怪,你不应该正在使用 Regex.Replace 进行简单的文本替换,如果您使用的是替换功能,则不需要单独执行“插入”。
-
您可能应该编辑您的问题以清楚地显示输入消息、.CSV 文件的内容以及输出有什么问题。
-
你说得对,已经做了一段时间了,所以我累了,把它改成了 messageText = Regex.Replace(messageText, word, line);
-
除非“单词”是“正则表达式模式”,否则不要这样使用 Regex.Replace。如果您只是想在 messageText 中用 'line' 替换 'word',请使用 messageText.Replace(word, line)