我正在使用DocX库替换word文档中的文本。我想以某种方式找到我的模板docx文件中的“[]”之间的所有字符串,例如[Name],[LastName],[Date]等...并将其替换为我之前加载到datagridview的具有相同列的值名称(姓名,姓氏,日期)。以下是我到目前为止的情况:
foreach (DataGridViewRow dataGridViewRow in list)
{
try
{
string template = txtUcitajTemplate.Text;
string text2 = "Aneksi";
if (!System.IO.Directory.Exists(text2))
{
System.IO.Directory.CreateDirectory(text2);
}
string path = string.Format("{0}.docx", dataGridViewRow.Cells["Name"].Value.ToString());
string path2 = System.IO.Path.Combine(text2, path);
using (DocX document = DocX.Load(template))
{
string patternstart = Regex.Escape("[");
string patternend = Regex.Escape("]");
string regexexpr = patternstart + @"(.*?)" + patternend;
// document.ReplaceText(regexexpr, dataGridViewRow.Cells[0].Value.ToString());
// document.ReplaceText(regexexpr, dataGridViewRow.Cells[1].Value.ToString());
var regex = new regex("[.*?]");
var matches = regex.matches(input); //your matches: name, name@gmail.com
foreach (var match in matches) // e.g. you can loop through your matches like this
{
document.ReplaceText(match.ToString(), dataGridViewRow.Cells["Name"].Value.ToString());
document.ReplaceText(match.ToString(), dataGridViewRow.Cells["LastName"].Value.ToString());
}
document.SaveAs(path2);
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:0)
尝试更改正则表达式,看起来这里的问题基本上与您尝试的相同(关于查找两个字符之间的值)。
Regular Expression to find a string included between two characters while EXCLUDING the delimiters
如果您使用该前提,则迭代所有匹配。我怀疑你能够改变你的代码来做你想要实现的目标。
答案 1 :(得分:0)
这是你的问题:
var regex = new regex("[.*?]");
您匹配括号[]
之间的任何字符,这意味着您的RegEx只会匹配字符.
,*
和?
。< / p>
您需要做的是逃避这些括号:
\[.*?\]