正则表达式只剥离字符串的开头

时间:2016-08-04 19:41:23

标签: python regex

我正在尝试使用正则表达式来匹配电话号码,方法是删除不需要的前缀,如0,*,#和+

e.g。

+*#+0#01231340010

应该产生,

1231340010

我正在使用python re module

我试过了,

re.sub(r'[0*#+]', '', '+*#+0#01231340010')

但它也会在0以后删除。

我尝试使用正则表达式组,但它仍然没有工作(或者我肯定做错了。)

任何帮助将不胜感激。

提前致谢。

5 个答案:

答案 0 :(得分:2)

添加字符串检查的开始(^)和*量词(0或更多次出现):

>>> re.sub(r'^[0*#+]*', '', '+*#+0#01231340010')
'1231340010'

或者,使用itertools.dropwhile()的非正则表达式方法:

>>> from itertools import dropwhile
>>> not_allowed = {'0', '*', '#', '+'}
>>> ''.join(dropwhile(lambda x: x in not_allowed, s))
'1231340010'

答案 1 :(得分:2)

我相信你正在做的是尝试删除字符串中[1-9]范围内第一个数字之前的所有内容。然后使用

更安全
re.sub(r'^[^1-9]+', '', input)

请参阅regex demo

模式详情

  • ^ - 字符串开头
  • [^1-9]+ - 1个或多个(+)字符,而不是1-9范围内的数字(0除外)

我说“更安全”意味着问题中可能没有其他前缀,例如p等。

答案 2 :(得分:1)

您希望仅使用^标记从头开始添加*以获取任何显示内容

re.sub(r'^[0*#+]*', '', '+*#+0#01231340010')
#'1231340010'

答案 3 :(得分:1)

使用'^'将正则表达式锚定到字符串的开头。 e.g。

re.sub(r'^[0*#+]', '', ...)

答案 4 :(得分:0)

您可以尝试使用以下正则表达式:

0*(\d+)$

它将匹配除前导零之外的所有数字。