2016-08-19 111 views
-3

我有一個正則表達式/[A-Za-z./-]+,我想測試的文本是ABCD123。在文本沒有通過正則表達式之後,我想要顯示在正則表達式中根本不包含的字符。所以在這種情況下,我想顯示123或(1,2,3)。我怎樣才能做到這一點 ?獲取所有不匹配的字符從正則表達式

問題是爲java。 LE:代碼接受一般的正則表達式和一般文本,所以它必須是一個通用的解決方案。

+1

你在用什麼語言?而只是匹配所有不是字母的東西。然後你有你的123(或1,2,3) –

+0

該代碼接受一般正則表達式和一般文本,所以它必須是一個通用的解決方案。 –

+0

有各種各樣的正則表達式,'([^ a-zA-Z] {1,})'將在bigquery上工作。 –

回答

1

你只是需要否定你的正則表達式:/([A-Za-z.\/-]+)|([^A-Za-z.\/-]+)/g

第二個捕獲組是將具有不匹配的元素組。

Example

+0

僅供參考更改的右側可能變得更短'(。)' – revo

+0

你沒有包含第一個/。爲什麼不 ?除此之外,該表達式可以是一般性的,並且我將其作爲參數接收。 –

+0

如果你的正則表達式在開始時必須使用斜槓,那麼你的輸入字符串'ABCD123'永遠不會匹配,預期的結果應該是A,B,C,D,1,2,3,而不僅僅是1,2,3 。你應該澄清這個問題。 @VisanCosmin – revo

0

包括捕獲所有其他字符的交替:

[A-Za-z.\/-]+|(.) 

這樣,如果交替的左側不匹配整個輸入串然後第一捕獲組中它有一些值。

Live demo

1

您也可以先檢查正則表達式通,不用時 - 由另一個正則表達式中刪除字符,然後你將有隻有沒有通過的字符。

僞代碼:

if string is not '[A-Za-z./-]+' then 
    wrong_chars = string.remove('[A-Za-z./-]+') 
+0

你可以從正則表達式指定的字符串中刪除嗎?因爲如果是這樣的話,那麼這就是解決方案。 –

+0

谷歌的第一個結果:http://stackoverflow.com/questions/11796985/java-regular-expression-to-remove-all-non-alphanumeric-characters-except-spaces –

+0

正則表達式可以用例如「/」 「,然後允許信件。我如何只消除字母?正則表達式沒有任何方法「regex.contains(」A「)」,那麼如果正則表達式是「/ [A]」,如何從ABC中刪除A? –

1
([^a-zA-Z]{1,}) 

將匹配你的格局。