我正在尝试使用正则表达式来匹配电话号码,方法是删除不需要的前缀,如0,*,#和+
e.g。
+*#+0#01231340010
应该产生,
1231340010
我正在使用python re module
我试过了,
re.sub(r'[0*#+]', '', '+*#+0#01231340010')
但它也会在0以后删除。
我尝试使用正则表达式组,但它仍然没有工作(或者我肯定做错了。)
任何帮助将不胜感激。
提前致谢。
答案 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+)$
它将匹配除前导零之外的所有数字。