C#查找word文档中两个字符之间的所有字符串

时间:2016-04-05 10:20:36

标签: c# search replace find docx

我正在使用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);
    }
}

2 个答案:

答案 0 :(得分:0)

尝试更改正则表达式,看起来这里的问题基本上与您尝试的相同(关于查找两个字符之间的值)。

Regular Expression to find a string included between two characters while EXCLUDING the delimiters

如果您使用该前提,则迭代所有匹配。我怀疑你能够改变你的代码来做你想要实现的目标。

答案 1 :(得分:0)

这是你的问题:

var regex = new regex("[.*?]");

See your RegEx here

您匹配括号[]之间的任何字符,这意味着您的RegEx只会匹配字符.*?。< / p>

您需要做的是逃避这些括号:

\[.*?\]

See it working here