有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式输出不相同

我有这样一个字符串:

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) 个答案

  1. # 1 楼答案

    你说你在用Java做这件事。如果使用^{},可以使用双参数版本,并提供一些想要返回的元素我假设字符串中的键/值对的数量是固定的,或者您知道它

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

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

    test
    0001
    suiteid
    111
    leavepolicy_employee
    

    同样地,如果你放入^{,它将产生五个元素

  2. # 2 楼答案

    行为正如预期的那样,只有在输入后面出现另一个下划线时,才会在下划线上拆分,这是由于前瞻性(?=.*_)

    如果您想要在一个数字后出现下划线时进行拆分,请使用以下正则表达式:

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

    live regex demo