我有一个字符串列表.其中一些是形式123-...456.可变部分"......"可以是:
123-apple-456123-banana-456123-456(注意只有一个连字符)除"apple"或"banana"之外的任何单词均无效.
对于这三种情况,我想分别匹配"apple","banana"和"".请注意,我从不想捕获连字符,但我总是希望匹配它.如果字符串不是123-...456如上所述的形式,那么根本就没有匹配.
如何编写正则表达式来执行此操作?假设我有一种风格,允许前瞻,后视,环视和非捕获组.
这里的关键观察是,当你有"苹果"或"香蕉"时,你还必须有尾随连字符,但你不想匹配它.当您匹配空白字符串时,您不能使用尾随连字符.我认为,封装这个断言的正则表达式将是正确的.
我在Java 1.6中使用Java正则表达式(尤其是解析数字输出)并且找不到\b("单词边界")的精确定义.我假设这-12将是一个"整数字"(匹配 \b\-?\d+\b),但似乎这不起作用.我很想知道匹配空格分隔数字的方法.
例:
Pattern pattern = Pattern.compile("\\s*\\b\\-?\\d+\\s*");
String plus = " 12 ";
System.out.println(""+pattern.matcher(plus).matches());
String minus = " -12 ";
System.out.println(""+pattern.matcher(minus).matches());
pattern = Pattern.compile("\\s*\\-?\\d+\\s*");
System.out.println(""+pattern.matcher(minus).matches());
Run Code Online (Sandbox Code Playgroud)
返回:
true
false
true
Run Code Online (Sandbox Code Playgroud)