2016-06-04 3 views
0

мне нужно найти «7.1/10» в «7.1/10&nb» со следующим регулярным выражением:Почему это регулярное выражение не соответствует в питона

\d{1}\.?\d{0,2}\/10 

Но следующий код ничего не найдено:

rating= "7.1/10&nb" 
p = re.compile(re.escape("\d{1}\.?\d{0,2}\/10")) 
m = p.match(rating) 
if m: 
    print("rating: {}".format(m.group())) 
else: 
    print("no match found in {}".format(rating)) 

В чем проблема с моим кодом?

+1

вы урожденная d для использования необработанного строкового литерала 'r' вместо' re.escape' 'p = re.compile (r" \ d {1} \.? \ d {0,2} \/10 ")' – rock321987

+0

Изменить 'p = re.compile (re.escape ("\ d {1} \.? \ d {0,2} \/10")) 'to' p = re.compile (r "\ d {1} \.? \ d {0,2} \/10 ")' он будет работать. –

+1

также, я подозреваю, что у вас _may_ возникают проблемы при использовании 'match'..поэтому' match' соответствует только началу строки .. – rock321987

ответ

1

Измените только одну строку в коде.

p = re.compile(re.escape("\d{1}\.?\d{0,2}\/10"))вre.compile(r"\d{1}\.?\d{0,2}\/10")

Он будет работать гладко.

2

p = re.compile(r"\d\.?\d{0,2}/10")

Есть несколько проблем, в вас вновь:

  • добавить 'г' для сырой строки или вам придется бежать все '\': re.compile("\\d\\.?\\d{0,2}/10")
  • \ д {1 } может быть \ d
  • \/ может быть /, нет необходимости, чтобы избежать