用于拆分单词/(斜线)单词的正则表达式

Regex for splitting word / (slash) word

我真的需要一个正则表达式专家: 我需要一个正则表达式(在 java 中)来拆分这个例子:

Hello/World (word/word) => 你好,世界

Hello/12 (word/number) => 你好,12

15/你好 (number/word) => 15,你好

12/17 (number/number) => 12/17 (不拆分)

更新:

这是我试过的,但它也标记了 number/number 选项 https://regex101.com/r/zZ9nO5/2

谢谢

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

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

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

替换为找到的相应组 、

一个简单的 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]+))", ","));
            }
        }

结果是:

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

多一点上下文就好了,但据我了解,你得到一个中间有一个“/”的字符串,你可以用“,”替换“/”,或者如果它有数字就不用在两侧。 所以我会做这样的事情:

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 种情况的大型正则表达式更简单,也更快。

方法略有不同,但您可以检查字符串中的字符,看看它们都是数字还是正斜杠,然后在必要时拆分:

   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;
}

输出:

Hello,World

Hello,12

15,Hello

12/17

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