我是一个正则表达式菜鸟,试图将段落分成句子。在我的语言中,我们在句子中间使用相当多的缩写(例如:bl.a.),所以我得出的结论是,我需要做的是寻找标点符号,后面跟着一个空格,然后是一个以大写字母开头的单词,例如:
[sentence1]...anymore. However...[sentence2]
这样的段落:
Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang. Det er ikke en bureaukratisk lovtekst blandt så mange andre.
应以此输出结束:
[0] => Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang.
[1] => Det er ikke en bureaukratisk lovtekst blandt så mange andre.
而不是这个:
[0] => Der er en lang og bevæget forhistorie bag lov om varsling m.v.
[1] => i forbindelse med afskedigelser af større omfang.
[2] => Det er ikke en bureaukratisk lovtekst blandt så mange andre.
我找到了一个解决方案,可以使用积极的后向功能来完成第一部分:
$regexp = (?<=[.!?] | [.!?][\'"]);
然后
$sentences = preg_split($regexp, $paragraph, -1, PREG_SPLIT_NO_EMPTY);
这是一个很好的起点,但由于缩写太多, split 了太多次。
我尝试过这样做:
(?<=[.!?]\s[A-Z] | [.!?][\'"])
针对其中任何一个出现的情况
. or ! or ?
后跟一个空格和一个大写字母,但这不起作用。
有谁知道是否有办法完成我想做的事情?
最佳答案
用于分割句子的 Unicode RegExp:(?<=[.?!;])\s+(?=\p{Lu})
此处解释了演示:http://regex101.com/r/iR7cC8
关于php - 使用正则表达式和 PHP 将段落拆分为句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15853097/