Регулярное выражение для разделения слова / (косой черты) слова

Мне действительно нужен эксперт по регулярным выражениям: мне нужно выражение регулярного выражения (в Java) для разделения этих примеров:

Hello / World (слово / слово) => Hello,World

Здравствуйте / 12 (слово / число) => Здравствуйте, 12

15 / Привет (число / слово) => 15, Привет

12/17 (число / число) => 12/17 (не разбивать)

Обновить:

Это то, что я пытался, но это также пометить номер / номер опции https://regex101.com/r/zZ9nO5/2

Спасибо

3 ответа

Решение

Это может быть не самое элегантное решение, но для вашего требования вы можете сделать это так:

(([A-Za-Z] +) / ([A-Za-Z] +)?) | (([A-Za-Z] +) / ([\ 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

Немного больше контекста было бы неплохо, но, насколько я понимаю, вы получаете строку с одним '/' в середине и вы либо заменяете '/' на ',' или нет, если у нее есть числа с обеих сторон. Так что я бы сделал что-то вроде этого:

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

Выход:

Привет, мир

Здравствуйте, 12

15, Привет

12/17

Это может помочь, если Hello12/15 не должен быть разделен.

Другие вопросы по тегам