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