正则表达式需要识别句子之间没有空格的位置

时间:2010-12-10 15:05:29

标签: c# regex

我需要一个正则表达式来识别句子开始的所有实例,而前一个句点之后没有空格。

例如,这是一个不好的句子:

I'm sentence one.This is sentence two.

这需要修复如下:

I'm sentence one. This is sentence two.

这不仅仅是一个字符串替换'。'的情况。用'。 '因为在段落中的其余句子中有正确的间距,所以还有很多的等号,这会给那些额外的空间。

5 个答案:

答案 0 :(得分:3)

\.(?!\s)将匹配后跟空格的点。您可能也想要感叹号和问号:[\.\!\?](?!\s)

修改 如果C#支持它,请尝试:[\.\!\?](?!\s|$)。它与字符串末尾的标点符号不匹配。

答案 1 :(得分:2)

您可以搜索\w\s{1}\.[A-Z]以查找单词字符,后跟单个空格字符,后跟句点,后跟大写字母,以识别这些字符。对于查找/替换:查找:(\w\s{1}\.)(A-Z])并替换为$1 $2

答案 2 :(得分:2)

我怀疑你是否可以创建一个适用于一般情况的正则表达式。

您提出的任何正则表达式解决方案都会有一些有趣的边缘情况,您必须仔细查看。例如,缩写“ie”会成为“我。” (即,它将有一个额外的空间,如果这个括号注释是通过正则表达式运行的,那么它将变成“i。e。,”)。

另外,引用文本的正确方法是在引号中包含标点 ,如“他说没关系”。如果你有[“他说没关系。”这是一个新句子。],你的正则表达式解决方案可能会在最终引用之前放置一个空格,或者可能完全忽略错误。

这些只是立即浮现在脑海中的两个案例。还有很多其他的。

虽然正则表达式将在一组有限的简单句子中起作用,但真正的书面语言会很快显示正则表达式不足以为此问题提供一般解决方案。

答案 3 :(得分:0)

如果一个句子以例如...您可能不希望将其更改为. . .

我认为以前的答案不考虑这种情况。

尝试在您找到单词的位置插入一个以大写

开头的新单词

查找(\w+[\.!?])([A-Z]'?\w+)替换$ 1 $ 2

答案 4 :(得分:0)