2013-08-30 126 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)',則表現良好。 –