分裂成句子Java

时间:2013-02-18 11:30:16

标签: java regex

我想将文本拆分成句子。我的文字中间包含\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 等小数的情况下进行拆分。

3 个答案:

答案 0 :(得分:9)

这个java正则表达式应该是它:

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

点数:

  • 您无需逃离\n,永远
  • 点周围看起来很奇怪的东西是负面看,并且意味着“上一个/下一个字符不能是数字

这个正则表达式说:“要么是换行符,要么是不在数字之前或之后的字面点


仅供参考,除了括号本身之外,你不需要转义字符类中的字符(在[]之间)。

答案 1 :(得分:2)

使用string.split("[\n.]")分割为\n.

在内部角色类中,.没有特殊含义。因此无需转义.

编辑: string.split("\n|[.](?<!\\d)(?!\\d)")可避免分割十进制数字。

在这里,对于每个.,后视和前瞻是检查两侧是否有数字。如果两者都不是数字,则应用拆分。

\n|\\.(?!\\d)|(?<!\\d)\\.避免在.上拆分双方数字。

\n|(?<!\\d)[.](?!\\d)如果任何一方有数字

,则避免拆分

所以你需要的可能是

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

分割something.4但不分割3.14

答案 2 :(得分:0)

您不需要在[]块中的Java正则表达式中双重转义:

[.\n]

应该有用。