最後,我需要一個正則表達式,它基本上將我的電話號碼轉換爲符合E164的數字。至於現在我得到了這個:替換大括號內的所有內容?
result = s.replaceAll("[(*)|+| ]", "");
它取代了一切罰款:空格,「+」 - 符號,還括號「()」。但它不符合它的大括號的內容,例如號碼+49 (0)11 111 11 11
將被替換爲49111111111
。
我該如何得到這個工作?
最後,我需要一個正則表達式,它基本上將我的電話號碼轉換爲符合E164的數字。至於現在我得到了這個:替換大括號內的所有內容?
result = s.replaceAll("[(*)|+| ]", "");
它取代了一切罰款:空格,「+」 - 符號,還括號「()」。但它不符合它的大括號的內容,例如號碼+49 (0)11 111 11 11
將被替換爲49111111111
。
我該如何得到這個工作?
你可以做到這一點,但是如果圓括號之間不僅僅是零,會怎樣呢?
result = s.replaceAll("\\([^()]*\\)|[*+ ]+", "");
作爲一個詳細的正則表達式:
result = s.replaceAll(
"(?x) # Allow comments in the regex. \n" +
"\\( # Either match a ( \n" +
"[^()]* # then any number of characters except parentheses \n" +
"\\) # then a). \n" +
"| # Or \n" +
"[*+\\ ]+ # Match one or more asterisks, pluses or spaces", "");
[(*)|+| ]
是一個字符類,匹配任何單個圓括號,星號棒,加或空格字符。擺脫了方括號,並使用類似
s.replaceAll("\\(.*?\\)|\\D", "");
這將刪除其他任何東西,不是一個數字之間的任何東西(包括)括號,以及。請注意,這將不處理嵌套的括號非常好 - 它會吃一切從一個開括號的第一關閉一個它認爲,這樣會改變(123(45)67)
爲67
(要刪除的不平衡右括號,因爲它是一個\D
)
我認爲你從character classes預計會有太多的魔法。首先,在字符類中,不要使用|
。這只是另一個角色,將與角色類相匹配。只需列出您希望包含的所有字符,而無需使用任何分隔符。
其次,角色類真的只是匹配單個字符。所以(*)
裏面的一個字符類可以根據定義除了刪除(
或*
(字面上)或)
。如果你是100%肯定,你的投入將永遠不會有嵌套括號或括號不匹配或東西,那麼你可以做這樣的事情:
"(?:\\([^)]\\)|\\D)+"
你需要加倍反斜槓。 –
@TimPietzcker好抓,thx –
你可以試試這個:"(\\(\\d+\\))|\\+|\\s"
。刪除paren和內容,加號和空格。
爲什麼不把一切都不是數字? – millimoose
使用空字符串替換所有'(\(\ d + \)| \ D)'這個簡單的東西可以用於你的例子。 – Alex