2012-03-30 89 views
4

如果整個字符串不是「M」,「F」,則我需要一個在Java中使用的正則表達式來替換帶有「UNKNOWN」或「M/F」。換句話說:正則表達式除了「M」,「F」,「M/F」之外的所有東西

  • 字符串 「M」 保持 「M」
  • 字符串 「F」 保持 「F」
  • 字符串 「M/F」 保持 「M/F」
  • 別的變「UNKNOWN」

一個奇怪的情況是「M /」或「F /」,它應該變成「UNKNOWN」。請幫忙,我在這裏死去。

我實際上是通過xml映射文件將正則表達式傳遞到框架中,所以我沒有對如何形成輸出的程序控制。我只能通過一個正則表達式,以及它被替換的東西。

+2

你爲什麼要使用這個正則表達式,而不是常規字符串比較和有條件的字符串賦值? – Bernd 2012-03-30 20:58:09

+1

這是否需要是一個正則表達式?你只有三個字符串來檢查。 – 2012-03-30 20:58:29

回答

3

可以使用負前瞻是這樣的:

Pattern.compile("^(?!^(?:M|F|M/F)$).*$"); 

使用字符串#的replaceAll你可以這樣做:

String replaced = str.replaceAll("^(?!^(?:M|F|M/F)$).*$", "UNKNOWN"); 
+0

確實。只需用UNKNOWN替換這個匹配即可。 – Dave 2012-03-30 21:04:27

+0

這樣做。我不知道負向預測(或者對於這個問題的常規預測)。謝謝一堆。 – Mario 2012-03-30 21:07:11

+0

不客氣。這是非常有用的閱讀正則表達式lookarounds:http://www.regular-expressions.info/lookaround.html – anubhava 2012-03-30 21:09:01

0

您可以測試該字符串是否匹配^(M|F|M/F)$和替換它,如果它不比賽。在僞代碼(因爲我不記得怎麼做正則表達式在Java中):

s = "M" 
if not match(s, '^(M|F|M/F)$') 
    s = "UNKNOWN" 
+0

我的問題是,我實際上是通過xml映射文件傳遞正則表達式到一個框架,所以我對於輸出如何形成沒有程序控制。我只能通過一個正則表達式,以及它被替換的東西。 – Mario 2012-03-30 21:05:27

0
if (!Pattern.matches("^M$|^F$|^M/F$", string)) { 
    string = "UNKNOWN"; 
} 

哦,這是相同的答案,因爲勞倫斯的..我會去爲單一的情況下,雖然.. aaand我看到它不是你想要的..對不起:)

相關問題