【问题标题】:Java (Regex?) split string between number/letter combinationJava(正则表达式?)在数字/字母组合之间拆分字符串
【发布时间】:2012-11-14 06:42:10
【问题描述】:

我一直在浏览 Google 结果的页面和页面,但没有发现任何可以帮助我的东西。

我想要做的是拆分像Bananas22Apples496Pears3 这样的字符串,并将其分解为某种可读格式。由于String.split() 无法做到这一点,我想知道是否有人可以向我指出可以完成此任务的正则表达式 sn-p。

稍微扩展一下:上面的字符串将被拆分为(为简单起见,String[]):

{"Bananas:22", "Apples:496", "Pears:3"}

【问题讨论】:

    标签: java regex string split explode


    【解决方案1】:

    试试这个

    String s = "Bananas22Apples496Pears3";
    
    String[] res = s.replaceAll("(?<=\\p{L})(?=\\d)", ":").split("(?<=\\d)(?=\\p{L})");
        for (String t : res) {
            System.out.println(t);
        }
    

    第一步是将空字符串替换为“:”,此时左侧是带有lookbehind assertion (?&lt;=\\p{L}) 的字母,右侧是带有lookahead assertion (?=\\d) 的数字.

    然后拆分结果,左边是数字,右边是字母。

    \\p{L} 是一个Unicode property,可以匹配每种语言中的每个字母。

    【讨论】:

      【解决方案2】:

      你需要Replace然后split这个字符串。你不能单独使用split

      1> Replace All 带有以下正则表达式的字符串

      (\\w+?)(\\d+)
      

      替换成

      $1:$2
      

      2> 现在Split 使用这个正则表达式

      (?<=\\d)(?=[a-zA-Z])
      

      【讨论】:

      • 我不太喜欢正则表达式,我尝试使用该模式进行 pattern.compile,但出现“无效转义序列”错误。
      • @Timr 你没有像这样逃脱它"\\w+?\\d+"
      • @Timr 如果您阅读 Java 模式示例,它肯定会有所帮助。我敢打赌他们也教你逃跑……
      • (?&lt;=\:\d+) 在 Java 中不起作用,因为它只允许有限长度的后视。
      【解决方案3】:

      这应该做你想做的:

      import java.util.regex.*;
      
      String d = "Bananas22Apples496Pears3"
      
      Pattern p = Pattern.compile("[A-Za-z]+|[0-9]+");
      
      Matcher m = p.matcher(d);
      
      while (m.find()) {
            System.out.println(m.group());
      }
      
      // Bananas
      // 22
      // Apples
      // 496
      // Pears
      // 3
      

      【讨论】:

        【解决方案4】:
        String myText = "Bananas22Apples496Pears3";
        System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,"));
        

        【讨论】:

          【解决方案5】:

          \d+ 替换为:$0,然后在(?=[a-zA-Z]+:\d+) 处拆分。

          【讨论】:

            猜你喜欢
            • 2011-10-16
            • 1970-01-01
            • 2017-12-30
            • 2016-04-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多