【问题标题】:How to split a String by "-" only when the following character is a digit and the previous one is a letter? Java/Scala仅当后面的字符是数字而前面的字符是字母时,如何用“-”分割字符串? Java/斯卡拉
【发布时间】:2013-10-08 05:41:14
【问题描述】:

我想找到一种方法,仅在某些情况下用“-”分割字符串。

如果前一个字符是字母(小写或大写)并且不是字符串中的第一个字符,我想拆分。并且后面的字符必须是数字[0-9]。字符串中没有空格。

-11 => List(-11)
v-11 => List(v,11)
v- => List(v-)
-2-11 => List(-2-11)
v-11- => List(v,11-)
-v-11- => List(-v,11-)

我无法使用 String.split(regex) 正确执行此操作。我找到的唯一解决方案是解析整个字符串并查找每个字符。有正则表达式吗?

感谢您的帮助。

【问题讨论】:

  • 我相信您可以为此使用前瞻。

标签: java regex string scala split


【解决方案1】:

尝试用这个正则表达式分割字符串:

"(?<=[A-Za-z])-(?=\\d+)"

添加一个测试类:

@Test
public void atest() {
    String re = "(?<=[A-Za-z])-(?=\\d+)";
    String[] ss = new String[] { "-11", "v-11", "v-", "-2-11", "v-11-", "-v-11-" };
    for (String s : ss) {
        System.out.println(s + " => " + Arrays.toString(s.split(re)));
    }
}

输出:

-11 => [-11]
v-11 => [v, 11]
v- => [v-]
-2-11 => [-2-11]
v-11- => [v, 11-]
-v-11- => [-v, 11-]

【讨论】:

  • 爱上那些时髦的 RE!
猜你喜欢
  • 2016-05-15
  • 2020-06-30
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2015-02-20
  • 2021-01-22
  • 2022-06-21
  • 2018-08-07
相关资源
最近更新 更多