例如:
start 2 4 9
end 5 8 39
如何使用正则表达式匹配4和8? 谢谢!
答案 0 :(得分:0)
我在上面评论的非正则表达式解决方案。这是伪代码,如果这个想法成立,这可以很容易地交叉应用于Java。
我的评论:
为什么你需要使用正则表达式?为什么不分裂 a-zA-Z ......然后用空格分开? Ex 1 2 3 abc 4 5 6 def 7 8 9 - > 1 2 3,abc 4 5 6,def 7 8 9.然后用空格分开,第一种情况是第二种元素,其他中间数字则是 第3个元素。如果你想让我详细说明,我可以在下面这样做。只是 要求澄清为什么正则表达式?
伪编码示例:
theString = "1 2 3 abc 4 5 6 def 7 8 9"
theString = theString.toLower() //lower case for ease of matching
splitS = theString.split([a-Z])
middleNum=[]
middleNum.add(splitS[0][1]) //the 2nd element of the 1st element in the array.
for int i =1; i<splitS.len; i++){
middleNum.add(splitS[i][2])
}
return middleNum //the middle numbers
// or you can stringily it and return a string vs. array.
//让我知道您是否正在尝试使用正则表达式。正则表达式不一定能让这个问题变得更容易。纠正我,如果我错了,但我没有看到效率大大提高与拆分它因为有很多前进/后退检查要处理,因为它是第二个数字并由非分裂数字字符。
这也使您可以更轻松地更改所需的输出。例如,如果您想要更改为下一个数字,因为数字字符串现在是4个字符,您很容易理解您正在做什么。如果您正在努力分割字符串,我假设您对Java相对较新。
答案 1 :(得分:0)
正则表达式的解决方案,\\d+
匹配数字,\\s+
匹配数字之间的空格,(\\d+)
括号捕获中间数。
public static Integer extractMiddleNumber(String source) {
Matcher matcher = Pattern.compile("\\d+\\s+(\\d+)\\s+\\d+").matcher(source);
if (matcher.find()) {
return Integer.parseInt(matcher.group(1));
}
return null; //not found, you can throw exception if you prefer
}
答案 2 :(得分:0)
由于每行只有三个数字,您可以使用以下正则表达式捕获并将第二个数字存储到第1组。
^\D*\d+\D*(\d+)\D*\d+\D*$
示例:强>
String s = "start 2 4 9";
Pattern regex1 = Pattern.compile("^\\D*\\d+\\D*(\\d+)\\D*\\d+\\D*$");
Matcher regexMatcher = regex1.matcher(s);
if (regexMatcher.find()) {
String ResultString = regexMatcher.group(1);
System.out.println(ResultString);
}
答案 3 :(得分:0)
我这样做
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* thanks http://txt2re.com/index-java.php3?s=start%202%204%209&-1&9&3&10&4&11&5
*/
public class Regex {
public static void main(String[] args) {
String[] txt = { "start 2 4 9", "end 5 8 39" };
for (String s : txt) {
match(s);
}
}
private static void match(String txt) {
String re1 = "(start|end)"; // Word 1
String re2 = "(\\s+)"; // White Space 1
String re3 = "(\\d+)"; // Integer Number 1
String re4 = "(\\s+)"; // White Space 2
String re5 = "(\\d+)"; // Integer Number 2 <==========
String re6 = "(\\s+)"; // White Space 3
String re7 = "(\\d+)"; // Integer Number 3
Pattern p = Pattern.compile(re1 + re2 + re3 + re4 + re5 + re6 + re7,
Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find()) {
// String word1=m.group(1);
// String ws1=m.group(2);
// String int1=m.group(3);
// String ws2=m.group(4);
String int2 = m.group(5);
// String ws3=m.group(6);
// String int3=m.group(7);
System.out.println(int2);
}
}
}