我知道我知道,有很多类似的问题,我可以说我读过所有这些问题。但是,我不擅长正则表达式,我无法弄清楚我需要的正则表达式。
我想在 Java 中拆分一个字符串,我有 4 个约束:
- 分隔符是 [.?!] (句末)
- 十进制数不应该被标记化
- 不应删除分隔符。
- 每个令牌的最小大小应为 5
例如,对于输入:
"Hello World! This answer worth $1.45 in U.S. dollar. Thank you."
输出将是:
[Hello World!, This answer worth $1.45 in U.S. dollar., Thank you.]
到目前为止,我通过这个正则表达式得到了三个第一个约束的答案:
text.split("(?<=[.!?])(?<!\\d)(?!\\d)");
而且我知道我应该{5,}
在我的正则表达式中使用某个地方,但是我尝试的任何组合都不起作用。
对于像这样的情况:"I love U.S. How about you?"
它给我一两个句子都没有关系,只要它不标记S.
为一个单独的句子。
最后,感谢介绍一个好的正则表达式教程。
更新:正如Chris 在评论中提到的,使用正则表达式几乎不可能解决这样的问题(以涵盖自然语言中发生的所有情况)。但是,我发现 HamZa 的答案是壁橱,也是最有用的一个。
所以,要小心!接受的答案不会涵盖所有可能的用例!