我对代码(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)")
背后的逻辑感到困惑
它将数字和字母分隔为输入字符串abc12dc23
,然后将其拆分为输出abc 12 dc 23
。
我只想解释上面的代码是如何工作的?
答案 0 :(得分:5)
这个正则表达式:
(?<=\D)(?=\d)|(?<=\d)(?=\D)
匹配2种模式,如|
字符所示:
这种模式:
(?<=\D)(?=\d)
和这种模式:
(?<=\d)(?=\D)
前者在字符串中查找位置,该位置在该位置之前有一个非数字(\D
)字符,在其后面有一个数字(\d
)。后者寻找反向发生的位置,前面的数字和后面的非数字。
以更抽象的方式说这个,正则表达式正在寻找数字 - 非数字边界。
split方法查找模式的所有匹配项,并在找到时将其拆分。