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

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

Hello / World (word / word) => Hello, World

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

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

12/17 (число / число) => 12/17(Не разделяйте)

Обновление:

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

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

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

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 случая.

0 голосов
/ 14 ноября 2018

Немного другой подход, но вы можете проверить символы в строке, чтобы увидеть, что они все являются числом или косой чертой, а затем разделить, если необходимо:

   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, Привет

12/17

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

0 голосов
/ 14 ноября 2018

Возможно, это не самое элегантное решение, но по вашему требованию вы можете сделать это так:

(([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
...