对于这种情况,Java String.split 我需要什么正则表达式
What regex do I need for Java String.split for this case
抱歉,我真的不知道如何用语言表达我希望它如何工作。
我想从字母字符中拆分数字字符。如果数字前面有连字符,我想保留它。
翻看之前的问题发现"(?<=\D)(?=\d)|(?<=\d)(?=\D)"
我实现的是这样的:
String s = "dfgsgf-89ff--989";
String[] pieces = s.split("(?<=\D)(?=\d)|(?<=\d)(?=\D)");
它给了我这个:
peices[0] = "dfgsgf"-
peices[1] = "89"
peices[2] = "ff--"
peices[3] = "989"
我真正想要的是这个:
peices[0] = "dfgsgf"
peices[0] = "-89"
peices[0] = "ff"
peices[0] = "--989"
哪个正则表达式会给我想要的结果?
我查看了 Java 模式页面,但我仍然无法理解特殊构造的工作原理。
看来你想要这样的东西,
String s = "dfgsgf-89ff--989";
String[] pieces = s.split("(?<=\d)(?=\D)|(?<=[A-Za-z])(?=[^A-Za-z])");
System.out.println(Arrays.toString(pieces));
或
String[] pieces = s.split("(?<=\d)(?=\D)|(?<=[A-Za-z])(?=-*\d)");
输出:
[dfgsgf, -89, ff, --989]
(?<=\d)(?=\D)
匹配存在于数字字符和非数字字符之间的边界。
(?<=[A-Za-z])(?=[^A-Za-z])
匹配存在于字母字符和非字母字符之间的边界。
抱歉,我真的不知道如何用语言表达我希望它如何工作。 我想从字母字符中拆分数字字符。如果数字前面有连字符,我想保留它。
翻看之前的问题发现"(?<=\D)(?=\d)|(?<=\d)(?=\D)"
我实现的是这样的:
String s = "dfgsgf-89ff--989";
String[] pieces = s.split("(?<=\D)(?=\d)|(?<=\d)(?=\D)");
它给了我这个:
peices[0] = "dfgsgf"-
peices[1] = "89"
peices[2] = "ff--"
peices[3] = "989"
我真正想要的是这个:
peices[0] = "dfgsgf"
peices[0] = "-89"
peices[0] = "ff"
peices[0] = "--989"
哪个正则表达式会给我想要的结果?
我查看了 Java 模式页面,但我仍然无法理解特殊构造的工作原理。
看来你想要这样的东西,
String s = "dfgsgf-89ff--989";
String[] pieces = s.split("(?<=\d)(?=\D)|(?<=[A-Za-z])(?=[^A-Za-z])");
System.out.println(Arrays.toString(pieces));
或
String[] pieces = s.split("(?<=\d)(?=\D)|(?<=[A-Za-z])(?=-*\d)");
输出:
[dfgsgf, -89, ff, --989]
(?<=\d)(?=\D)
匹配存在于数字字符和非数字字符之间的边界。(?<=[A-Za-z])(?=[^A-Za-z])
匹配存在于字母字符和非字母字符之间的边界。