正则表达式查找和替换 C# 中数据表列中的单词列表的最快方法是什么?
What is the fastest way to regex find-and-replace a list of words in a datatable column in C#?
我目前正在使用这种迭代每个源代码行和每个单词替换的方法,有没有更快的方法?
我有要在数据表 'dataSource' 的一列中查找和替换的源文本,以及数据表 'wrData'
的 2 列中的匹配词和替换词
private void function()
{
//Repeats for every row in dataSource
foreach (DataRow drRow in dataSource.Rows)
{
//Repeats for every row in WordReplace.csv
foreach (DataRow wrRow in wrData.Rows)
{
string input = drRow["text"].ToString();
string pattern;
//Uses regex if not blank
if (wrRow["source_regex_override"] != null && !string.IsNullOrEmpty(wrRow["source_regex_override"].ToString()))
{
pattern = wrRow["source_regex_override"].ToString();
}
//Use regex-fied source if regex override is blank
else
{
string wr_source = wrRow["source"].ToString();
pattern = @"\b" + wr_source + @"\b";
}
string replace = wrRow["change_to"].ToString();
string result = Regex.Replace(input, pattern, replace, RegexOptions.IgnoreCase);
drRow["text"] = result;
}
}
}
我看不出有太大的改进空间。不要访问该列三次,而是访问一次。请注意,wrRow[col_name]
在列集合中进行查找。
string pattern = wrRow["source_regex_override"]?.ToString();
if (String.IsNullOrEmpty(pattern))
{
string wr_source = wrRow["source"].ToString();
pattern = @"\b" + wr_source + @"\b";
}
它使用 Null-conditional operators ?.
.
更好的变量名称 replace
(动词):replacement
(名词)。
我目前正在使用这种迭代每个源代码行和每个单词替换的方法,有没有更快的方法?
我有要在数据表 'dataSource' 的一列中查找和替换的源文本,以及数据表 'wrData'
的 2 列中的匹配词和替换词private void function()
{
//Repeats for every row in dataSource
foreach (DataRow drRow in dataSource.Rows)
{
//Repeats for every row in WordReplace.csv
foreach (DataRow wrRow in wrData.Rows)
{
string input = drRow["text"].ToString();
string pattern;
//Uses regex if not blank
if (wrRow["source_regex_override"] != null && !string.IsNullOrEmpty(wrRow["source_regex_override"].ToString()))
{
pattern = wrRow["source_regex_override"].ToString();
}
//Use regex-fied source if regex override is blank
else
{
string wr_source = wrRow["source"].ToString();
pattern = @"\b" + wr_source + @"\b";
}
string replace = wrRow["change_to"].ToString();
string result = Regex.Replace(input, pattern, replace, RegexOptions.IgnoreCase);
drRow["text"] = result;
}
}
}
我看不出有太大的改进空间。不要访问该列三次,而是访问一次。请注意,wrRow[col_name]
在列集合中进行查找。
string pattern = wrRow["source_regex_override"]?.ToString();
if (String.IsNullOrEmpty(pattern))
{
string wr_source = wrRow["source"].ToString();
pattern = @"\b" + wr_source + @"\b";
}
它使用 Null-conditional operators ?.
.
更好的变量名称 replace
(动词):replacement
(名词)。