2013-08-30 85 views
1

我想检查像这样的=SUM(A1:A10)自定义模式。 A1A10的地方可以改变,但其他人正在修复。我试了下面的代码:检查自定义字符串模式

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class test { 
    public static void main(String[] args) { 
     Pattern pattern=Pattern.compile("SUM[(][A-T][1-20][:][A-T][1-20][)]"); 
     Matcher m=pattern.matcher("SUM(A9:A1)"); 
     System.out.println(m.matches()); 
    } 
} 

但它不好。请帮帮我!

+1

我认为[1-20]作为一组仅仅是1,2和0的Regex涉及的字符,而不是编号范围那样 – Cruncher

+0

如果你正在做很多电子表格式的解析,我建议......解析。 –

+0

如果答案有帮助,可以[接受](http://meta.stackexchange.com/a/5235/227183)。 –

回答

8

[1-20]这样的模式与您认为它不相符。它不匹配1和20之间的数字,它会匹配1,2和0。要匹配1-20,使用([1-9]|1\d|20):低于10的备选匹配的数字第一部分,第二场比赛范围10-19,第三场比赛20

+0

谢谢! :)我现在好了。 – user2729868

2

这是你的正则表达式应该是什么样子:

SUM\([A-T]([1-9]|1[0-9]|20):[A-T]([1-9]|1[0-9]|20)\) 

Regular expression visualization

在Java字符串:

"SUM\\([A-T]([1-9]|1[0-9]|20):[A-T]([1-9]|1[0-9]|20)\\)" 
+0

不错的图@PaulVargas,我不知道[debugex](http://www.debuggex.com),用来[regex101](http://regex101.com) – sinsedrix

+0

哈哈。没问题。如果您的表达式不包含某些特定于Java的构造(例如'(?<!X)',则表现良好。 –