我搜索了几个帖子,试图找出一种方法来检索每个术语和表达式的运算符,如下所示:
`now`+`1 day`-`2 days`
对于这个表达式,我想要有5个组:现在,+,1天, - ,2天。
我提出的正则表达式如下:
`(never|now|\d+\s+(?:millisecond|second|minute|hour|day|year)s?)`(?:\s*(\+|\-)\s*`(never|now|\d+\s+(?:millisecond|second|minute|hour|day|year)s?)`)*
然而,有了这个正则表达式,我只得到三组:现在, - ,2天。为了获得表达式中的每个术语和运算符,我应该做出哪些更改?请考虑表达式应包含 n 术语和 n-1 运算符实例。
非常感谢你的帮助!干杯!
答案 0 :(得分:1)
使用Java的String拆分方法会更容易:http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-
例如:
String blah = "`now`+`1 day`-`2 days`";
String[] blahArray = blah.split("`");
blahArray将包含:[“”,“now”,“+”,“1天”,“ - ”,“2天”]
答案 1 :(得分:0)
正则表达式可以匹配您询问的术语,但是他们无法按照您的要求捕获组。
当捕获组包含在重复模式中时,它们捕获组将仅包含它匹配的最后一个字符串。
示例: (\d)+
将匹配0123
,第一个捕获组中将包含3
。
使用java,你可以在循环中使用诸如find
之类的东西沿着你的字符串走。 Find example
答案 2 :(得分:0)
如果支持超过+
和-
,只需在两个字符类中添加操作数,那么这应该可以完成工作:
String input = "`now`+`1 day`-`2 days`";
String pattern = "[+-]|[^+-]*";
Matcher matcher = Pattern.compile(pattern).matcher(input);
while (matcher.find()) {
System.out.println(matcher.group().replace('`', ' ').trim());
}
打印
now
+
1 day
-
2 days