举一个具体的例子,我想将文本文档分成句子。我正在考虑使用以下正则表达式(仍然可能需要调整):
[!?][\s]*|[.\n][!?\s]+[.!?\s]*
匹配标点符号/空格(句子之间的内容) - 分隔符)(.|\n)*?([!?.]\s+|[\n]{2,}|$)
:捕获后跟标点符号或换行符的任何字符串(完整句子-我想要的内容本身)
一般来说,首选哪种方法?在我的特定上下文中,我想跟踪每个句子的开始和结束索引,所以我不能做像 String#split 这样简单的事情.
谢谢。
最佳答案
假设您打算使用普通的 Pattern
和 Matcher
处理,第一个正则表达式通常会捕获非常少的字符(最多结束标点符号和一些空白字符)因此应该是最快的。如果您正在解析一个非常大的文档,这可能会产生影响。
但是,提取每个句子的开始和结束索引可能会比较笨拙,因为您需要来自两个连续匹配的信息才能分隔整个句子。第二个正则表达式直接将句子映射到单个匹配项并启用最简单的代码。
所以这里没有免费的午餐。两者都可以完成工作,尽管您可以根据您的目标文档类型使它们更加强大。特别要注意句子中间出现意外的标点符号,例如:
... the "?" character can be used to...
关于java - 使用正则表达式来匹配内容或分隔符哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521925/