使用正则表达式匹配内容还是分隔符更好?

时间:2015-07-20 16:44:23

标签: java regex

对于一个具体的例子,我想将文本文档分成句子。我正在考虑使用跟随正则表达式(仍然可能需要调整):

  • <input name="search-filter" class="form-control" type="search" ng-model="searchBox.properties.title" /> <input name="search-filter" class="form-control" type="search" ng-model="searchBox.properties.owners" /> 匹配标点符号/空格(句子之间的东西 - 分隔符)
  • [!?][\s]*|[.\n][!?\s]+[.!?\s]*:它捕获任何字符串后跟标点符号或换行符(完整句子 - 我想要的内容)

一般来说,哪种方法更受欢迎?在我的特定背景下,我想跟踪每个句子的开始和结束索引,所以我不能做一些像String#split这样简单的事情。

感谢。

1 个答案:

答案 0 :(得分:1)

假设您打算使用vanilla PatternMatcher处理,第一个正则表达式通常会捕获更多,更少的字符(最多结束标点符号和一些空格字符),因此应该是最快的。如果您正在解析一个非常庞大的文档,这可能会有所不同。

但是,为每个句子提取开始和结束索引可能更为笨拙,因为您需要来自两个连续匹配的信息才能分隔整个句子。第二个正则表达式直接将句子映射到单个匹配,并启用最简单的代码。

所以这里没有免费午餐。两者都可以完成工作,尽管根据您要定位的文档类型,您可以使它们更加强大。特别要注意句子中间出现意外的标点字符,如:

  

......“?”角色可以用来......