Java中使用正则表达式匹配句子

发布于 2024-08-29 02:08:50 字数 253 浏览 8 评论 0原文

我正在使用 java 中的 Scanner 类来遍历文本文件并提取每个句子。我在我的扫描仪上使用 setDelimiter 方法来处理正则表达式:

Pattern.compile("[\\w]*[\\.|?|!][\\s]")

目前这似乎有效,但它在句子末尾留下了空格。有没有一种简单的方法可以匹配末尾的空格但不将其包含在结果中?

我意识到这可能是一个简单的问题,但我以前从未使用过正则表达式,所以放轻松:)

I'm using the Scanner class in java to go through a a text file and extract each sentence. I'm using the setDelimiter method on my Scanner to the regex:

Pattern.compile("[\\w]*[\\.|?|!][\\s]")

This currently seems to work, but it leaves the whitespace at the end of the sentence. Is there an easy way to match the whitespace at the end but not include it in the result?

I realize this is probably an easy question but I've never used regex before so go easy :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怎言笑 2024-09-05 02:08:50

试试这个:

"(?<=[.!?])\\s+"

这使用 lookarounds 来匹配前面的 \\s+通过[.!?]


如果您还想删除标点符号,则只需将其作为匹配的一部分即可:

"[.!?]+\\s+"

这会将 "ORLY!?!? LOL" 拆分为 "ORLY"“哈哈”

Try this:

"(?<=[.!?])\\s+"

This uses lookarounds to match \\s+ preceded by [.!?].


If you want to remove the punctuations as well, then just include it as part of the match:

"[.!?]+\\s+"

This will split "ORLY!?!? LOL" into "ORLY" and "LOL"

剪不断理还乱 2024-09-05 02:08:50

您正在寻找的是积极的前瞻性。这应该可以做到:

Pattern.compile("\\w*[.?!](?=\\s)")

What you're looking for is a positive lookahead. This should do it:

Pattern.compile("\\w*[.?!](?=\\s)")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文