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。这是一个问题。有谁能建议我如何用C代码来代替word文档中的单词来解决这个问题。如果你已经有了一些脚本,请随意发布,我会尽力提供更多帮助 我不确定您正在使用什么功能来查找文本实例,但我建议您查看regex,并使用类似于C# 替换Word文档中的单词会导致多次使用C替换#,c#,ms-word,C#,Ms Word,我需要创建一个C#.NET程序,该程序将搜索Microsoft Word文档中的特定单词,并将其替换为其他单词。例如,在我的word文件中有一个文本–LeadSoft IT。此“LeadSoft IT”将由–LeadSoft IT Limited取代。现在有一个问题,第一次LeadSoft IT将被LeadSoft IT Limited取代。但如果我再次运行该程序,它将再次更改LeadSoft it,并且在下一次中,文本将LeadSoft it Limited。这是一个问题。有谁能建议我如何用C
(LeadSoft IT(?!Limited))
的东西
正则表达式:
一个好的正则表达式测试器:
编辑:我制作了一个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#中重新创建的代码:
正则表达式检查整个字符串是否有Leadsoft IT
后面没有Limited
的实例,对于所有这些实例,将Leadsoft IT
替换为Leadsoft IT Limited
正则表达式使用所谓的“负前瞻(?!”,确保左边的字符串后面不跟右边的字符串。您可以随意编辑正则表达式,但要注意匹配性非常强
如果您想更好地理解正则表达式字符串,可以将其复制到
如果有帮助,请告诉我 如果你已经有了这方面的脚本,请随意发布,我会尽力提供更多帮助 我不确定您正在使用什么功能来查找文本实例,但我建议您查看regex,并使用类似于
(LeadSoft IT(?!Limited))
的东西
正则表达式:
一个好的正则表达式测试器:
编辑:我制作了一个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#中重新创建的代码:
正则表达式检查整个字符串是否有Leadsoft IT
后面没有Limited
的实例,对于所有这些实例,将Leadsoft IT
替换为Leadsoft IT Limited
正则表达式使用所谓的“负前瞻(?!”,确保左边的字符串后面不跟右边的字符串。您可以随意编辑正则表达式,但要注意匹配性非常强
如果您想更好地理解正则表达式字符串,可以将其复制到
如果有帮助,请告诉我 简单地说,您可以运行另一个替换来修复您造成的问题:
s = s.Replace("LeadSoft IT", "LeadSoft IT Limited").Replace("LeadSoft IT Limited Limited", "LeadSoft IT Limited");
如果你在对这个问题进行更一般的修复,而不是对问题字符串进行硬编码,请考虑检查所找到的字符串是否在替换的字符串中,这将意味着问题发生。这意味着您需要在文档上运行第二个替换,以查找在替换上运行替换的结果
简单地说,您可以运行另一个替换来修复您造成的问题:
s = s.Replace("LeadSoft IT", "LeadSoft IT Limited").Replace("LeadSoft IT Limited Limited", "LeadSoft IT Limited");
如果你在对这个问题进行更一般的修复,而不是对问题字符串进行硬编码,请考虑检查所找到的字符串是否在替换的字符串中,这将意味着问题发生。这意味着您需要在文档上运行第二个替换,以查找在替换上运行替换的结果
你可能对我如何解决这个问题感兴趣。 起初,我使用的是NPOI,但它把文档弄得一团糟,所以我发现DOCX文件只是一个带有XML的ZIP归档文件 用法:
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, "{{", "}}");
}
var vars=Dictionary()
{
{“测试标签”,“测试标签值”}
}
使用(var doci=new DociFlow.Lib.Word.SeekAndReplace())
{
//test.docx包含带有标记“{{testtag}}”的文本,它将被替换为“test tag value”
doci.Open(“test.docx”);
doci.findandplace(vars,“{{,“}”);
}
您可能对我如何解决这个问题感兴趣。
起初,我使用的是NPOI,但它把文档弄得一团糟,所以我发现DOCX文件只是一个带有XML的ZIP归档文件
用法:
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, "{{", "}}");
}
var vars=Dictionary()
{
{“测试标签”,“测试标签值”}
}
使用(var doci=new DociFlow.Lib.Word.SeekAndReplace())
{
//test.docx包含带有标记“{{testtag}}”的文本,它将被替换为“test tag value”
doci.Open(“test.docx”);
doci.findandplace(vars,“{{,“}”);
}
你能告诉我什么是正则表达式吗?当然,给我一分钟。@mnu nasir更新了我的答案。:)@mnu nasir如果您有正在使用的脚本(覆盖太多的脚本),我可以给您一些提示。:)谢谢我会让你知道你能告诉我什么是正则表达式吗?当然,给我一分钟。@mnu nasir更新了我的答案。:)@mnu nasir如果您有正在使用的脚本(覆盖太多的脚本),我可以给您一些提示。:)谢谢我会让你知道的