2014-03-12 32 views
0

我需要想出一個正則表達式來解析我的輸入字符串。我的輸入字符串的格式爲:使用正則表達式分析字符串

[alphanumeric].[alpha][numeric].[alpha][alpha][alpha].[julian date: yyyyddd] 

如:

A.A2.ABC.2014071 
    3.M1.MMB.2014071 

我需要從3號位串,並想知道什麼是做到這一點的最簡單的方法。

期望的結果:

A2.ABC.2014071 
M1.MMB.2014071 
+0

歡迎來到Stack Overflow。當你詢問正則表達式時,它有助於(很多)識別將使用正則表達式的主機環境; Perl和PHP的答案通常有很大的不同。 –

回答

1

使用這個表達式:

\w.[A-Z]\d.[A-Z]{3}.\d{7} 

使用上述正則表達式是這樣的:

String[] in = { 
    "A.A2.ABC.2014071", "3.M1.MMB.2014071" 
}; 

Pattern p = Pattern.compile("\\w.[A-Z]\\d.[A-Z]{3}.\\d{7}"); 
for (String s: in) { 
    Matcher m = p.matcher(s); 
    while (m.find()) { 
     System.out.println("Result: " + m.group().substring(2)); 
    } 
} 

現場演示:http://ideone.com/tns9iY

+0

我正在使用Java。 – user3411153

1

(?i)將被視爲不區分大小寫。

(?i)^[a-z\d]\.[a-z]\d\.[a-z]{3}\.\d{7}$ 

這裏a-z意味着從A到Z的任何字母和\d意味着從0到9

任何數字現在,如果你想刪除第一節點前,然後用這個表達式和替換它與$1(或者可以是\1

(?i)^[a-z\d]\.([a-z]\d\.[a-z]{3}\.\d{7})$ 

另一種選擇是用空代替以下:

(?i)^[a-z\d]\. 
+0

我能夠與表達式匹配。如何忽略點之前的第一個alpha? – user3411153

+0

@ user3411153使用我答案中的最後兩個示例。或者我誤解了你的問題? –

+0

我沒有辦法返回並更換$ 1。我實際上需要一個返回子字符串的正則表達式。 – user3411153

1

如果輸入字符串只是長格式,那麼除了前兩個字符之外,您希望所有的東西都可以。你可以安排與什麼來代替它們:

s/^..// 

或者你可以安排捕捉到一切,除了前兩個字符:

/^..(.*)/ 

如果表達式是一個較大的字符串的一部分,那麼擊穿字母數字組件變得更加重要。

細節因託管正則表達式的語言而異。上面寫的符號可能是Perl或PCRE(Perl Compatible Regular Expressions)。許多其他語言也會接受這些正則表達式,但其他語言則需要調整。