正则表达式输出不相同

时间:2015-09-23 14:54:07

标签: java regex

我有一个这样的字符串:

test_0001_suiteid_111_leavepolicy_employee

当我使用正则表达式在java中拆分它时:

_(?=.*_)

它显示了这样的ouptut:

test
0001 
suiteid
111
leavepolicy_employee

但如果我使用这个字符串:

test_0001_suiteid_111_leavepolicy

它显示了这样的ouptut:

test
0001 
suiteid
111_leavepolicy

你能解释一下为什么会这样吗?我希望输出与使用常见正则表达式的第一个输出相同。

2 个答案:

答案 0 :(得分:2)

行为符合预期,只有在输入后面出现另一个下划线时才会在下划线上拆分 - 由于前瞻(?=.*_)

如果 想要分裂,如果下划线在数字之后出现,请使用此正则表达式:

(?<=\d)_|_(?=.*_)

请参阅live regex demo

答案 1 :(得分:1)

你说你是用Java做的。如果使用String#split(),则可以使用双参数版本并提供要返回的许多元素。 我假设你的字符串中键/值对的数量是固定的,或者你知道

String string = "test_0001_suiteid_111_leavepolicy_employee";
String[] parts = string.split("_", 5);

这应该给你一个五个元素的列表:

test
0001
suiteid
111
leavepolicy_employee

如果你输入test_0001_suiteid_111_leavepolicy,它同样会产生五个元素。