C# 在替换不需要的字符时,如何防止某些单词一起运行?

C# 在替换不需要的字符时,如何防止某些单词一起运行?,c#,regex,replace,trim,C#,Regex,Replace,Trim,我想删除所有字符,如逗号、句点、引号等,这样一行: 婴儿汉斯·帕特里克(Hans Patrick)以通常的方式接受母乳香膏,而不是通过专利瓶。当他还是个孩子的时候,当他受到父母严厉的惩罚时,他的一个任性行为就是用他小小的肺使劲尖叫。这种奇特的习惯不过是使他在成熟期如此杰出的天才的预兆 …将转换为以下内容: The infant Hans Patrick received his mammarial balm in the usual way and not through the instrum

我想删除所有字符,如逗号、句点、引号等,这样一行:

婴儿汉斯·帕特里克(Hans Patrick)以通常的方式接受母乳香膏,而不是通过专利瓶。当他还是个孩子的时候,当他受到父母严厉的惩罚时,他的一个任性行为就是用他小小的肺使劲尖叫。这种奇特的习惯不过是使他在成熟期如此杰出的天才的预兆

…将转换为以下内容:

The infant Hans Patrick received his mammarial balm in the usual way and not through the instrumentality of a patent bottle One of his caprices when yet a child was to scream with all the force of his little lungs when he was severely chastised by his parents This singular habit was but a foreshadowing of that genius which has rendered him so eminent in his maturity
通过这种方式,我可以在空格处拆分单个单词,并且在单词的末尾没有标点符号的附加

我正试图用以下代码实现这一点:

Regex onlyAlphanumericSpaceApostropheAndHyphen = new Regex("[^a-zA-Z0-9 '-]");
. . .
doc1StrArray = File.ReadAllLines(sDoc1Path, Encoding.UTF8);
. . .
foreach (string line in doc1StrArray) 
{
    trimmedLine = line;
    trimmedLine = trimmedLine.Replace("—", " ");
    trimmedLine = onlyAlphanumericSpaceApostropheAndHyphen.Replace(trimmedLine, "");
    string[] subWords = trimmedLine.Split();
…但它并非在所有情况下都有效,我不明白为什么它通常有效,但在其他情况下,它会去掉空格字符,从而将两个单词一起运行,因此在逐步执行上面的第二行代码后,这一行就变成了这样:

婴儿汉斯·帕特里克(Hans Patrick)以通常的方式接受母乳香膏,而不是通过专利瓶的手段。当一个孩子被父母严重催促时,他会用他小小的肺使劲尖叫,这是他的一种任性行为。这种奇特的习惯只是使他如此聪明的天才的预兆在他成熟的时候

因此,一些单词组合成一个单词,它们之间没有空格:

theusual
patentbottle
screamwith
severelychastised
aforeshadowing
soeminent

为什么会发生这种情况,我如何防止这种情况继续发生?

这些单词之间的空格似乎不是空格字符。给定文本在固定宽度字体中的外观,在第一期发行时与通常情况下一样:

这显示了换行时发生的所有问题,看起来它们是换行符。您可以通过将正则表达式中的空格更改为\s来解决此问题,以保留所有形式的空白,注意必须在c正则表达式中转义\:

Regex onlyAlphanumericSpaceApostropheAndHyphen = new Regex("[^a-zA-Z0-9\\s'-]"); 

这些单词之间的空格似乎不是空格字符。给定文本在固定宽度字体中的外观,在第一期发行时与通常情况下一样:

这显示了换行时发生的所有问题,看起来它们是换行符。您可以通过将正则表达式中的空格更改为\s来解决此问题,以保留所有形式的空白,注意必须在c正则表达式中转义\:

Regex onlyAlphanumericSpaceApostropheAndHyphen = new Regex("[^a-zA-Z0-9\\s'-]"); 

这些单词之间的空格似乎不是空格字符。也许它们是其他形式的空白;如果将正则表达式更改为[^a-zA-Z0-9\s'-],会发生什么情况?文本或其他空白字符(如tab)中可能存在不间断空格。我认为它们可能是换行符;如果以固定宽度字体查看文本,并将第一行与“常用”分隔开,则所有其他连接的单词都出现在行边界上。@尼克:使用此选项:Regex only phanumericspace撇号和连字符=new Regex[^a-zA-Z0-9\s'-];我逃走了Sequence@B.ClayShannon您需要避开反斜杠,因为这些单词之间的空格似乎不是空格字符。也许它们是其他形式的空白;如果将正则表达式更改为[^a-zA-Z0-9\s'-],会发生什么情况?文本或其他空白字符(如tab)中可能存在不间断空格。我认为它们可能是换行符;如果以固定宽度字体查看文本,并将第一行与“常用”分隔开,则所有其他连接的单词都出现在行边界上。@尼克:使用此选项:Regex only phanumericspace撇号和连字符=new Regex[^a-zA-Z0-9\s'-];我逃走了Sequence@B.ClayShannon你需要逃离这个世界backslash@B.ClayShannon这真是一个令人惊喜的惊喜!感谢您的慷慨,这不是必要的,但非常感谢。@B.ClayShannon嗯,这是一个非常令人愉快的惊喜!谢谢你的慷慨,这不是必要的,但非常感谢。