我正在使用DocX库来替换word文档中的文本。我想以某种方式在我的模板docx文件中找到"[]"之间的所有字符串,例如[Name]、[LastName]、[Date]等…并将其替换为我以前加载到datagridview的具有相同列名(Name、LastName、Date)的值。以下是我目前所拥有的:
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);
}
}
尝试更改正则表达式,这里的问题看起来基本上与您尝试的相同(关于查找两个字符之间的值)。
正则表达式,用于查找包含在两个字符之间的字符串,同时排除分隔符
如果使用该前提,则遍历所有匹配项。我怀疑您将能够修改您的代码来实现您想要实现的目标。
这是您的问题:
var regex = new regex("[.*?]");
点击此处查看您的RegEx
您正在匹配放在方括号[]
之间的任何字符,这意味着您的RegEx将仅从字面上匹配字符.
、*
和?
。
你需要做的是摆脱这些括号:
[.*?]
看到它在这里工作