用于拆分单词/(斜线)单词的正则表达式
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
不 应该拆分,这可能会有所帮助。
我真的需要一个正则表达式专家: 我需要一个正则表达式(在 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
不 应该拆分,这可能会有所帮助。