如何解决替换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 举报,一经查实,本站将立刻删除。