【问题标题】:Split regex to extract Strings of contiguous characters拆分正则表达式以提取连续字符的字符串
【发布时间】:2012-11-15 19:05:23
【问题描述】:

是否有一个正则表达式可以与String.split() 一起使用以将字符串分解为连续的字符 - 即在下一个字符与前一个字符不同的地方拆分?

这是测试用例:

String regex = "your answer here";
String[] parts = "aaabbcddeee".split(regex);
System.out.println(Arrays.toString(parts));

预期输出:

[aaa, bb, c, dd, eee]

虽然测试用例只有字母作为输入,但这只是为了清楚起见;输入字符可以是任何字符。


请不要提供涉及循环或其他技术的“变通办法”。

问题是为如上所示的代码找到正确的正则表达式 - 即只使用split() 而没有其他方法调用。这不是寻找能够“完成工作”的代码的问题。

【问题讨论】:

    标签: java regex split contiguous


    【解决方案1】:

    完全可以编写正则表达式进行一步拆分:

    "(?<=(.))(?!\\1)"
    

    由于您想在每组相同字符之间进行拆分,我们只需要寻找两组之间的边界。我通过使用积极的后视来获取前一个字符,并使用消极的前瞻和后向引用来检查下一个字符是否不是同一个字符来实现这一点。

    如您所见,正则表达式是零宽度的(只有 2 个环顾断言)。正则表达式不使用任何字符。

    【讨论】:

    • in .net 组中的字符,即(.) 也包含在结果中..我想知道为什么java 不是这种情况
    • @Some1.Kill.The.DJ:我想不同语言之间存在一些差异。我不知道如何在 .NET(或 Ruby,因为它还包括在拆分结果中捕获组)中实现相同的效果。
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多