C# 在替换不需要的字符时,如何防止某些单词一起运行?
我想删除所有字符,如逗号、句点、引号等,这样一行: 婴儿汉斯·帕特里克(Hans Patrick)以通常的方式接受母乳香膏,而不是通过专利瓶。当他还是个孩子的时候,当他受到父母严厉的惩罚时,他的一个任性行为就是用他小小的肺使劲尖叫。这种奇特的习惯不过是使他在成熟期如此杰出的天才的预兆 …将转换为以下内容: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
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嗯,这是一个非常令人愉快的惊喜!谢谢你的慷慨,这不是必要的,但非常感谢。