微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

替换Word文档中的单词会导致多次用C#替换

如何解决替换Word文档中的单词会导致多次用C#替换

我需要创建一个 C#.NET程序,该程序将在 Microsoft Word文档搜索特定的单词,并将其替换为其他单词。例如,在我的Word文件中,有一个文本- LeadSoft IT 。此“ LeadSoft IT”将由– LeadSoft IT Limited 代替。现在有一个问题,那就是,LeadSoft IT会在第一时间被LeadSoft IT Limited取代。但是,如果我再次运行该程序,它将再次更改LeadSoft IT,下一次文本将为 LeadSoft IT Limited Limited 。这是个问题。谁能建议我如何使用C#代码替换Word文档中的单词来解决此问题。

解决方法

如果您已经有一些脚本,可以随时发布,我会尽力帮助的。

我不确定您要使用什么功能来查找文本实例,但是我建议您研究一下正则表达式,并使用类似(LeadSoft IT(?! Limited))的东西。

正则表达式:https://regexr.com/ 一个好的正则表达式测试器:https://www.regextester.com/109925

编辑:我制作了一个使用正则表达式替换实例的Python脚本:

import re

word_doc = "We like working " \
           "here at Leadsoft IT.\n" \
           "We are not limited here at " \
           "Leadsoft It Limited."

replace_str = "Leadsoft IT Limited"

reg_str = '(Leadsoft IT(?!.?Limited))'

fixed_str = re.sub(reg_str,replace_str,word_doc,flags=re.IGNORECASE)

print(fixed_str)

# Prints:
# We like working here at Leadsoft IT Limited.
# We are not limited here at Leadsoft It Limited.

编辑2:用C#重新创建代码:https://gist.github.com/Zylvian/47ecd6d1953b8d8c3900dc30645efe98

对于未在Leadsoft IT后跟Limited的实例,正则表达式检查整个字符串,对于所有这些实例,将Leadsoft IT替换为Leadsoft IT Limited

正则表达式使用所谓的“负向超前(?!)”,以确保左边的字符串不跟在右边的字符串。随意编辑正则表达式,使之适合您,但请注意匹配非常牢固。

如果您想更好地理解正则表达式字符串,请随时将其复制到https://www.regextester.com/中。

让我知道是否有帮助!

,

简而言之,您可以运行另一个替换来解决导致的问题:

location /css/ {

}

如果您要更通用的解决方案而不是对问题字符串进行硬编码,请考虑检查找到的字符串是否在替换的字符串内,这意味着会出现问题。这意味着您需要在文档上进行第二次替换,以找到在替换中运行替换

的结果
s = s.Replace("LeadSoft IT","LeadSoft IT Limited").Replace("LeadSoft IT Limited Limited","LeadSoft IT Limited");
,

您可能对我如何解决此问题感兴趣。 最初,我使用的是NPOI,但它却使文档一团糟,因此我发现DOCX文件只是具有XML的ZIP存档。

https://github.com/kubala156/DociFlow/blob/main/DociFlow.Lib/Word/SeekAndReplace.cs

用法:

var vars = Dictionary<string,string>() 
{
    { "testtag","Test tag value" }
}
using (var doci = new DociFlow.Lib.Word.SeekAndReplace())
{
    // test.docx contains text with tag "{{testtag}}" it will be replaced with "Test tag value"
    doci.Open("test.docx");
    doci.FindAndReplace(vars,"{{","}}");
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。