正则表达式,用于拆分单词/(斜杠)

时间:2018-11-14 09:46:03

标签: java regex split slash

我真的需要一位正则表达式专家: 我需要一个正则表达式(在Java中)来拆分此示例:

Hello / World(单词/单词)=> Hello,World

你好/ 12(单词/数字)=>你好,12

15 /你好(数字/单词)=> 15,你好

12/17(数字/数字)=> 12/17(不拆分)

更新:

这是我尝试过的方法,但同时也标记了数字/数字选项 https://regex101.com/r/zZ9nO5/2

谢谢

3 个答案:

答案 0 :(得分:0)

这可能不是最优雅的解决方案,但是根据您的要求,您可以这样做:

(([[a-zA-Z] +?)/([a-zA-Z] +?))|(([a-zA-Z] +?)/([\ d] +))|| (([\ d] +?)/([a-zA-Z] +))

这是对单词/单词,单词/数字和数字/单词的检查

替换为找到的相应组\ 2 \ 5 \ 8,\ 3 \ 6 \ 9

一个简单的Java程序将是:

  public static void main(String[] args) {
            String[] stringArray=new String[]{"Hello/World","Hello/12","15/Hello","12/17"}; 
            for(String s:stringArray) {
                System.out.println(s.replaceAll("(([a-zA-Z]+?)/([a-zA-Z]+))|(([a-zA-Z]+?)/([\\d]+))|(([\\d]+?)/([a-zA-Z]+))", "$2$5$8,$3$6$9"));
            }
        }

结果是:

Hello,World
Hello,12
15,Hello
12/17

答案 1 :(得分:0)

多一点上下文会很好,但是据我了解,您会在中间得到一个带有单个'/'的字符串,或者将'/'替换为',',或者如果两者上都带有数字,则不会双方。 所以我会做这样的事情:

public class MyClass {
 public static void main(String args[]) {
        String mystring = "12/25";

        if(!mystring.matches("^\\d+\\/\\d+$"))
            mystring = mystring.replace("/", ",");

        System.out.println(mystring);
    }
}

如果这是您要在此处执行的操作,那么我认为它不那么复杂,而且比在所有4种情况下区分大型正则表达式都要快。

答案 2 :(得分:0)

方法略有不同,但是您可以检查String中的字符以确保它们都是数字或正斜杠,然后在必要时进行分割:

   public static void main(String[] args) {
    String[] strArray = new String[]{"Hello/World", "Hello/12", "15/Hello", "12/17"};

    for(String str: strArray){
        if(checkIfValid(str)){
            System.out.println(str);
        }
        else{
            System.out.println(str.replace("/", ","));
        }
    }
}

public static boolean checkIfValid(String str) {
    for (int i = 0; i < str.length(); i++) {
        if (!Character.isDigit(str.charAt(i)) && str.charAt(i) != '/') {
            return false;
        }
    }
    return true;
}

输出:

  

你好,世界

     

你好,12

     

15,你好

     

12/17

如果Hello12/15不是 应该拆分的话,这可能会有所帮助。