C# 如何处理word中文本范围之间的不间断连字符?

C# 如何处理word中文本范围之间的不间断连字符?,c#,text,ms-word,range,C#,Text,Ms Word,Range,我在word中有一些带有不间断连字符的文本。我需要输出的文本。但是我正在删除不间断连字符的文本 Word.Range rangeObj = _wordDoc.Range(ref x, ref y); txt += rangeObj.Text; 我正在使用上面的代码。在txt变量中,我得到了输出,但删除了不间断的连字符。 提前谢谢。我不知道c#但是在VBA范围内。FormattedText很好用。尝试rangeObj.FormattedText 例如,这在VBA中工作得很好 Sub test()

我在word中有一些带有不间断连字符的文本。我需要输出的文本。但是我正在删除不间断连字符的文本

Word.Range rangeObj = _wordDoc.Range(ref x, ref y);
txt += rangeObj.Text;
我正在使用上面的代码。在txt变量中,我得到了输出,但删除了不间断的连字符。 提前谢谢。

我不知道c#但是在VBA
范围内。FormattedText
很好用。尝试
rangeObj.FormattedText

例如,这在VBA中工作得很好

Sub test()
    Set oRng = ActiveDocument.Paragraphs(1).Range
        s = oRng.FormattedText
        oRng.InsertAfter s
    Set oRng = Nothing
End Sub

我理解的问题是:如何用普通破折号(ANSI 45)替换从单词范围读取的文本字符串中的任何不间断连字符(ANSI 30)

这可以在VBA中使用
Replace
功能完成。例如:

txt = Replace(rangeObj.Text, Chr(30), "-")
 string selText = wdApp.Selection.Text;
 char cDash = (char) 45;
 char cNonBreakHyph = (char) 30;
 System.Diagnostics.Debug.Print(selText.Replace(cNonBreakHyph, cDash));
当然,C#使用.NET框架提供的工具。这里是
Replace
方法,它可以用字符串替换字符串或用字符替换字符。由于非中断连字符需要由其字符代码表示,因此字符重载是正确的。例如:

txt = Replace(rangeObj.Text, Chr(30), "-")
 string selText = wdApp.Selection.Text;
 char cDash = (char) 45;
 char cNonBreakHyph = (char) 30;
 System.Diagnostics.Debug.Print(selText.Replace(cNonBreakHyph, cDash));

我有一个解决方案。我们可以使用上面的代码行将非中断连字符替换为普通连字符:

请参阅。Chr(160)=非中断空格不是纯文本符号<代码>范围。格式化文本你能帮忙吗?@James Rahul的建议“不管用”对你有什么好处?对于包含特殊字符的文本,您实际需要/想要做什么?@Cindy,我想在txt中使用连字符。例如,假设word文档中有两行。1.正常连字符2。不间断连字符。当我阅读rangeObj.Text时,我希望两个文本都带有连字符。但是我得到了1.2的正常连字符。不间断连字符。2中没有连字符。您没有提到用不间断连字符替换连字符。Metod无法工作,因为我们使用object
range
的接口方法。请参阅使用
range编写代码。FormattedText
和代码错误!您没有告诉我们您想用简单连字符替换不间断连字符,因为它在ms word的find属性中非常简单。您的正则表达式将交替与字符类语法混淆。字符类匹配方括号中的任何一个字符,例如[abc],不要与(A | b | c)混淆。正则表达式所做的是用连字符替换任何管道字符(|)。