【发布时间】:2020-10-19 05:29:34
【问题描述】:
我想去掉逗号、句号、引号等所有字符,这样一行:
婴儿汉斯·帕特里克(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
为什么会发生这种情况,我该如何防止它继续发生?
【问题讨论】:
-
这些单词之间的空格似乎不是空格字符。也许它们是其他形式的空白;如果将正则表达式更改为
[^a-zA-Z0-9\s'-],会发生什么? -
文本中可能存在不间断空格或制表符等其他空白字符。
-
我认为它们可能是换行符;如果您查看固定宽度字体的文本并断开
the和usual之间的第一行,所有其他连接的单词出现在行边界上。 -
@Nick:有了这个:Regex onlyAlphanumericSpaceApostropheAndHyphen = new Regex("[^a-zA-Z0-9\s'-]");我得到“无法识别的转义序列”
-
@B.ClayShannon 你需要转义反斜杠