【发布时间】:2014-03-24 17:11:54
【问题描述】:
我正在使用 PHP 的 preg_split() 将段落拆分为句子。这是我正在使用的正则表达式:
(?<=[\.\?\!]|(\."))\s(?=[A-Z\s\b])
它应该匹配以标点符号开头的空格,然后是空格或大写字母。但是,它不匹配这样的情况:
A "word. ".
我希望它将它分成两部分:A "word. 和 ".,但它不匹配。如何修复正则表达式?
【问题讨论】:
-
编写一个正则表达式很容易,该表达式将由“一个空格前面有一个标点符号,后面跟着一个空格或大写字母”,但这并不总是构成句子的开头。常见例外:缩写。 “如何将段落拆分为句子”的简短回答是,仅靠正则表达式无法做到这一点。
-
同意。词法分析是必要的。
-
旁注:
".不是有效的语法。对于句点,如果句子以引号结尾,句点应在引号内。因此,您不仅要求正则表达式解析正确的语法(它不能),而且要求它对不正确的语法宽容。 -
请注意,在字符类
[]中,您不需要(不应使用)反斜杠。 -
@Floris 好吧,我承认语言环境在规则中起作用。正则表达式不适合这项工作的更多原因!