REGEX删除空间

时间:2013-04-28 20:28:53

标签: regex

我想创建正则表达式以删除一些匹配的字符串,字符串是电话号码

示例用户输入电话号码如下:

+jfalkjfkl saj f62 81 7876 asdadad30 asasda36

然后输出将是这样的:

628178763036

目前使用我当前的正则表达式^[\+\sa-zA-Z]+,它可以选择+jfalkjfkl saj f部分

什么是正则表达式,所以它也可以选择数字空间?

e.g:

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

5 个答案:

答案 0 :(得分:4)

我不知道您计划使用哪种语言,但您可以替换此模式:  [^\d]+,使用空字符串应该可以实现此目的。它将删除所有不是数字的内容。

答案 1 :(得分:1)

使用PCRE正则表达式,您应该只需删除与\D+匹配的任何内容。例如:

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

打印:

628178763036

答案 2 :(得分:0)

您似乎需要进行两项操作:

  1. 删除既不是空白也不是数字的所有内容:

    s/[^ \d]//g;
    
  2. 删除所有额外的空白:

    s/  +/ /g;
    

    如果您还需要删除前导和尾随空白:

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

    (用一个空格替换多个空格后)。

  3. 您可以使用\s来表示更多类似空格的字符,而不仅仅是空白字符。

答案 3 :(得分:0)

如果您进行替换,您可以使用数字之间的空格重建电话号码:

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

答案 4 :(得分:0)

使用后视和前瞻来断言数字必须在空格之前/之后:

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

整个正则表达式与空格匹配,因此无需在替换中引用组,只需替换为空白。