1

我想将文本分成句子。我的文字包含\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']

我尝试了一个简单的正则表达式,它在\nor上拆分.

[\\\\n\\.]

虽然这不起作用,但单独指定有效。

\\\\n
\\.

那么任何人都可以给出一个将分裂的正则表达式\n.

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

4

3 回答 3

9

这个java正则表达式应该去:

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

这里的要点:

  • \n你永远不需要逃跑
  • 点周围那些看起来很奇怪的东西是负面的环顾四周,意思是“上一个/下一个字符不能是数字

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


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

于 2013-02-18T11:32:53.427 回答
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

于 2013-02-18T11:31:48.863 回答
0

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

[.\n]

应该管用。

于 2013-02-18T11:33:40.650 回答