繁体   English   中英

拆分成句子Java

[英]Splitting into sentences Java

我想将文本分成句子。 我的文字之间包含\\n字符。 我希望在\\n和处进行拆分. (点)。 我不能将BreakIterator用作拆分条件,因为它是一个空格后跟一个句点(在我要拆分的文本中,这不是必需的)。

范例

i am a java programmer.i like coding in java. pi is 3.14\n regex not working

应该输出:

['i am a java programmer', 'i like coding in java', 'pi is 3.14', 'regex not working']

我尝试了一个简单的正则表达式,它可以分割为\\n.

[\\\\n\\.]

尽管这不能正常工作,但单独指定是可行的。

\\\\n
\\.

因此,任何人都可以提供将\\n或拆分的正则表达式.

另一个问题是我不希望在像5.6这样的小数的情况下进行拆分。

这个Java regex应该可以:

"\n|((?<!\\d)\\.(?!\\d))"

这里的要点:

  • 您无需逃避\\n
  • 点周围那些看起来怪异的事物是消极的事物,并且表示“上一个/下一个字符不能是数字

此正则表达式说:“换行符或不带数字的前后文字点


仅供参考,除了括号本身,您无需对字符类中的字符进行转义(在[]之间)。

使用string.split("[\\n.]")\\n或处拆分.

内部角色类, . 没有特别的意义。 因此,无需逃避.

编辑: string.split("\\n|[.](?<!\\\\d)(?!\\\\d)")避免拆分小数。

在这里,每个. 向后看和向前看是否在两边都有数字。 如果两者都不是数字,则应用拆分。

\\n|\\\\.(?!\\\\d)|(?<!\\\\d)\\\\. 避免为拆分. 两边都有数字。

\\n|(?<!\\\\d)[.](?!\\\\d)避免在任何边都有数字的情况下拆分

所以你需要的是

string.split("\n|\\.(?!\\d)|(?<!\\d)\\.")

这会分裂something.4 3.14但不会分裂3.14

您无需在[]块中的Java正则表达式中将内容进行两次转义:

[.\n]

应该管用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM