Regex无效表达式不需要重复



我试图从字符串中删除除'+'之外的所有内容

我正在使用这个:

phone = re.sub(r'[^+]', '', cleaned_data['phone_number'])

我也试过了:

phone = re.sub(r'[^+]', '', cleaned_data['phone_number'])

返回'invalid expression'失败

编辑:如果发现错误位于这些行,使用调试器

phone_patterns = [r'^0d{9}$', r'^+33d{9}$']
        for phone_pattern in phone_patterns:
            if re.match(phone, phone_pattern):
                .....

stack_trace:回溯:

File "/path/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/path/request_quote/views.py" in new
  12.         if formset.is_valid():
File "/path/local/lib/python2.7/site-packages/django/forms/formsets.py" in is_valid
  277.         err = self.errors
File "/path/local/lib/python2.7/site-packages/django/forms/formsets.py" in errors
  259.             self.full_clean()
File "/path/local/lib/python2.7/site-packages/django/forms/formsets.py" in full_clean
  297.             self._errors.append(form.errors)
File "/path/local/lib/python2.7/site-packages/django/forms/forms.py" in _get_errors
  117.             self.full_clean()
File "/path/local/lib/python2.7/site-packages/django/forms/forms.py" in full_clean
  273.         self._clean_form()
File "/path/local/lib/python2.7/site-packages/django/forms/forms.py" in _clean_form
  299.             self.cleaned_data = self.clean()
File "/path/request_quote/forms.py" in clean
  56.         QuoteForm.COUNTRY_VALIDATORS[country](self, cleaned_data)
File "/path/request_quote/forms.py" in validate_fr
  102.             if re.match(phone, phone_pattern):
File "/path/lib/python2.7/re.py" in match
  137.     return _compile(pattern, flags).match(string)
File "/path/lib/python2.7/re.py" in _compile
  242.         raise error, v # invalid expression
Exception Type: error at /en/request_quote/new/
Exception Value: nothing to repeat

编辑:错误来自开头的"+"应该转义,但是如何转义呢?

EDIT2:非常愚蠢,但我做了

re.match(string,pattern)
不是

re.match(pattern,string)

试试这个电话号码的正则表达式:

/^[0-9+]{0,1}[0-9]{1,}$/

.

它将接受:

1)可选的开头+

2)数字

>>> import string
>>> phone = "+1729"
>>> "".join(x for x in phone if x in string.digits)
'1729'

最新更新