2013-04-28 144 views
0

我想創建正則表達式以除去一些匹配的字符串,該字符串是電話號碼REGEX除去空間

實施例的用戶輸入的電話號碼這樣的:

+jfalkjfkl saj f62 81 7876 asdadad30 asasda36

然後輸出將是這樣的:

628178763036

在我目前的正則表達式瞬間3210它可以選擇部分+jfalkjfkl saj f

什麼是正則表達式,所以它也可以選擇數字的空間?

e.g:

62(select the space here)8181(select the space here)7876

+0

您使用什麼語言? – Bohemian 2013-04-28 21:28:09

+0

你能澄清你是否想保留數字之間的空格或刪除它們嗎?大約一半的答案刪除他們,一半保留他們。 – 2013-04-28 22:37:13

+0

@Bohemian我正在使用PHP。 – GusDeCooL 2013-04-29 04:50:33

回答

4

我不知道你打算在使用該用什麼語言,但你可以取代這種模式: [^\d]+,用一個空字符串應該做到這一點。它會刪除所有不是數字的東西。

+0

這是如此酷,非常簡單,像我想要的工作:) – GusDeCooL 2013-04-29 04:52:56

+0

但這將刪除逗號和任何其他字符 – Bohemian 2013-04-29 06:46:14

0

這樣看來,你需要兩個操作:

  1. 刪除一切,既不是空白的,也不是一個位:

    s/[^ \d]//g; 
    
  2. 全部刪除多餘的空格:

    s/ +/ /g; 
    

    如果您需要刪除前導和尾隨空白:

    s/^ //; 
    s/ $//; 
    

    (用一個空白替換多個空白後)。

您可以使用\s來表示更多的空格字符而不僅僅是空白。

+0

這是很酷的保留數字之間的空格,但我很確定OP想要刪除數字之間的空格;看到他期望的輸出'628178763036'。他還表示他想要選擇要去除的空間。 – 2013-04-28 22:00:00

+0

@StigBrautaset:這取決於你對問題最後評論的解釋,關於'62(選擇空間)81'。我將其解釋爲「保持數字之間的空格」;如果OP有不同的含義,那麼你必須修改我的正則表達式。的確,你可以使用's/[^ \ d] + // g;'在單個正則表達式中完成這項工作。 – 2013-04-28 22:09:52

+0

這個問題的主題是「正則表達式刪除空間」... :-) – 2013-04-28 22:12:27

0

如果你犯了一個代替你可以重建的電話號碼與號碼之間的空間:與前瞻

search: \D*(\d+)\D*?(\s?) 
replace: $1$2 
0

使用向後看斷言,數字必須先/遵循空間(S ):

(?<=\d) +(?=\d) 

整個正則表達式匹配空格,所以不需要在替換中引用組,只需替換爲空白即可。

1

使用PCRE正則表達式,你應該能夠簡單地刪除任何匹配\D+的東西。例如:

echo "+jfalkjfkl saj f62 81 7876 asdadad30 asasda36" | perl -pe 's/\D+//g' 

打印:

628178763036