Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Почему не срабатывает Python's raw string для regular expression?


(Romanchuk Katerina) #1

Пример:

import re
my_string = """lalalala **************** mimimimi """

#target_symbols = re.findall(r"****************", my_string)   <- Don't work
target_symbols = re.findall("\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*", my_string)

print target_symbols

Raw string не работает:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    description = re.findall("****", my_string)
  File "C:\Python27\lib\re.py", line 177, in findall
    return _compile(pattern, flags).findall(string)
  File "C:\Python27\lib\re.py", line 245, in _compile
    raise error, v # invalid expression
error: nothing to repeat

Экранирование каждого символа работает хорошо(возвращает ['****************'] ), но выглядит некрасиво.


(Andrey Soldatenko) #2

Попробуй так:

regexp = re.escape(r"****************")
re.findall(regexp, my_string)
>>> re.findall(regexp, my_string)
['****************']```

https://docs.python.org/2/library/re.html

re.escape(string)
Return string with all non-alphanumerics backslashed; this is useful if you want to match an arbitrary literal string that may have regular expression metacharacters in it.

(Romanchuk Katerina) #3

Поняла, получилось, спасибо!


(Artur Korobeynyk) #4

а чем плохо

re.findall(r"\*+", my_string)