gpt4 book ai didi

Java - 使用最小大小和分隔符拆分标记的正则表达式

转载 作者:行者123 更新时间:2023-11-29 03:31:01 25 4
gpt4 key购买 nike

我知道我知道,有很多类似的问题,我可以说我都看了。但是,我不擅长正则表达式,我无法找出我需要的正则表达式。

我想在 Java 中拆分一个字符串,我有 4 个约束条件:

  1. 分隔符是[.?!](句末)
  2. 不应标记小数
  3. 不应删除分隔符。
  4. 每个 token 的最小大小应为 5

例如,对于输入:

“Hello World!这个答案值(value) 1.45 美元。谢谢。”

输出将是:

[Hello World!,这个答案值(value) 1.45 美元。谢谢。]

到目前为止,我通过这个正则表达式得到了三个第一个约束的答案:

text.split("(?<=[.!?])(?<!\\d)(?!\\d)");

而且我知道我应该在我的正则表达式中的某处使用 {5,},但我尝试过的任何组合都不起作用。

对于像这样的情况:“我爱美国,你呢?” 它给我一两句话并不重要,只要它不标记 S。 作为一个单独的句子。

最后,介绍一个很好的正则表达式教程。

更新:作为Chris评论中提到,用正则表达式几乎不可能解决这样的问题(涵盖自然语言中发生的所有情况)。但是,我在壁橱里找到了 HamZa 的答案,而且是最有用的一个。

所以,小心点!接受的答案不会涵盖所有可能的用例!

最佳答案

我的回答来自 previously made regex .
正则表达式基本上是 (?<=[.?!])\s+(?=[a-z])这意味着匹配以 . 开头的任何空格一次或多次, ?!然后是 [a-z] (不要忘记 i 修饰符)。

现在根据本题的需要修改一下:

  1. 我们首先将其转换为 JAVA 正则表达式:(?<=[.?!])\\s+(?=[a-z])
  2. 我们将添加 i匹配不区分大小写的修饰符 (?i)(?<=[.?!])\\s+(?=[a-z])
  3. 我们会将表达式置于正向预测中以防止“吃掉”字符(在本例中为定界符):(?=(?i)(?<=[.?!])\\s+(?=[a-z]))
  4. 我们将添加一个负向回顾来检查格式中是否没有缩写 LETTER DOT LETTER DOT : (?i)(?<=[.?!])(?<![a-z]\.[a-z]\.)\\s+(?=[a-z])

所以我们最终的正则表达式看起来像:(?i)(?<=[.?!])(?<![a-z]\.[a-z]\.)\\s+(?=[a-z]) .

一些链接:

关于Java - 使用最小大小和分隔符拆分标记的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18281206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com