我真的需要一位正则表达式专家: 我需要一个正则表达式(在Java中)来拆分此示例:
Hello / World(单词/单词)=> Hello,World
你好/ 12(单词/数字)=>你好,12
15 /你好(数字/单词)=> 15,你好
12/17(数字/数字)=> 12/17(不拆分)
更新:
这是我尝试过的方法,但同时也标记了数字/数字选项 https://regex101.com/r/zZ9nO5/2
谢谢
答案 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
不是 应该拆分的话,这可能会有所帮助。