2012-05-21 53 views
1

我想創建一個正則表達式來生成一個匹配並剝離$和最後兩個字符,如果最後一個字符以大寫字母加數字結尾。簡單的正則表達式匹配

I'll strip off the $ and then an ending capital letter + number: 

$mytestA1 --> expected output: mytest 
$againD4 --> expected output: again 
$something --> expected output: something 
$name3 --> expected output: name3 // because there was no capital letter before the number digit 
$name2P4 --> expected output: name2 

我會在我的代碼中檢查'if'檢查是否存在$,我甚至會打擾運行正則表達式。

謝謝。

+1

是太空在'我的測試'中有一個錯字?另外,你使用哪種語言? – Junuxx

+0

描述有點不清楚 - 你能發佈預期輸出的例子 –

+0

感謝您的快速回復。我加入了預期的產出。使用Java來運行正則表達式。 –

回答

1

在Java中只使用字符串#的replaceAll:

String replaced = str.replaceAll("^\\$|[A-Z]\\d$", ""); 
+1

和測試用例在:http://www.rubular.com/r/ueBkJYVLQI – anubhava

+0

非常感謝這個答案,這是最簡單的一個。 –

+0

不客氣,很高興它爲你解決。 – anubhava

1

這可能不是最有效的,但它會工作...

\$([^\s]*)(?:[A-Z]\d)|\$([^\s]*) 

它的工作原理,因爲第一組發現所有那些國會隨後數... ...,第二個發現所有沒有後綴的那些...

如果您從捕獲組獲得您想要的匹配項。

我覺得像這樣的工作...

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

public class HereYouGo { 
    public static void main (String args[]) { 

     String input = "$mytestA1 --> expected output: mytest\r\n$againD4 --> expected output: again\r\n$something --> expected output: something\r\n$name3 --> expected output: name3 // because there was no capital letter before the number digit\r\n$name2P4 --> expected output: name2\r\n";  

     Pattern myPattern = Pattern.compile("\\$([^ ]*)(?:[A-Z]\\d)|\\$([^ ]*)", Pattern.DOTALL | Pattern.MULTILINE); 

     Matcher myMatcher = myPattern.matcher(input); 

     while(myMatcher.find()) 
     { 
      String group1 = myMatcher.group(1); 
      String group2 = myMatcher.group(2); 

      //note: this should probably be changed in the case neither match is found 
      System.out.println(group1!=null? group1 : group2); 
     } 
    } 
} 

這將輸出以下

mytest 
again 
something 
name3 
name2 
+0

感謝您的及時回覆。這個答案的問題是,如果你輸入「$ name3」,它會返回「nam」,因爲'e'不是大寫字母,所以當我期待「名稱」時。作爲參考,我正在使用這個測試工具。我不確定它是否100%可靠 - http://www.regextester.com/ –

+0

我使用RegexBuddy測試並使用Java正則表達式引擎,它工作得很好。 –

+0

我認爲你對...有不區分大小寫; ;-) –