我正在尝试使用正则表达式来解析类型为cs=1
的输入字符串,但是我似乎无法弄清楚如何在忽略“ move”关键字的同时获取所有命令组。
我的正则表达式是:
t=3
我的Java代码是这样:
cs
在循环中,我希望第一个命令为t
,第二个命令为cs
。使用现在的正则表达式,我只能得到"move 2 up;1 right;1 down"
。这里有一些输入示例:https://regex101.com/r/Fg0hk3/3。
如何修复我的正则表达式?
最终使用2种正则表达式模式,一种用于完全匹配,一种用于令牌:
完全匹配:
(?:\bmove\b) ((?<amount>[1-6]) (?<direction>(\bup\b|\bright\b|\bdown\b|\bleft\b))(?:;?))+
代币:
String str = "move 1 right;2 left;";
String regex = "(?:\\bmove\\b) ((?<amount>[1-6]) (?<direction>(\\bup\\b|\\bright\\b|\\bdown\\b|\\bleft\\b))(?:;?))+";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher match = pattern.matcher(str);
while (match.find()) {
String group = match.group(1);
System.out.println(group);
}
答案 0 :(得分:0)
最简单的方法是创建一个正则表达式,以仅匹配您需要的部分(数字和方向),而不用“移动”或分号。然后将其与字符串匹配,然后将所有组添加到列表中。
String str = "move 55 up;2 right;100 down;8 left";
String regex = "(\\d+ (?:up|down|left|right))";
List<String> matches = new ArrayList<String>();
Matcher m = Pattern.compile(regex).matcher(str);
while (m.find()) {
matches.add(m.group());
}
System.out.println(matches);
// Output: [55 up, 2 right, 100 down, 8 left]