Регулярное выражение для разделения слова / (косой черты) слова
Мне действительно нужен эксперт по регулярным выражениям: мне нужно выражение регулярного выражения (в 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
не должен быть разделен.