2012-01-18 2 views
0

Как я могу взять число (в следующем примере) в этой строке?Как взять число из строки с помощью регулярного выражения?

string = """<option value="full_review">Detailed review (Up to $20.00)</option>""" 

Я использовал

detailint = re.findall("""value="full_review">Detailed review (Up to $(.*))</option>""", bidsrc) 

Но он не возвращает мне пот! Какие-нибудь трюки?

ответ

3

Предполагая, что bidsrc = string, вы должны избегать как $, так и (), поскольку они имеют особое значение для компилятора регулярных выражений. Вы также захотите использовать .*? или лучше [\d.]+, чтобы соответствовать фактической сумме.

r"""value="full_review">Detailed review \(Up to \$([\d.]+)\)</option>""" 
+0

Спасибо за память у меня спасаясь специальные символы! благодаря! –

1

Довольно простой.

>>> import re 
>>> s = "Detailed review (Up to $20.00)" 
>>> re.findall("(\d+)\.",s) 
['20'] 

Я уверен, что вы уже проверили, но питона документы на subject очень полезно. Также обратите внимание на специальные символы, используемые python, например $, ( и ).

Для более подробного объяснения в регулярном выражении, (\d+) - это группа захвата, которая захватывает 1 или более цифр до периода (здесь вытесняется как \.). поэтому он соответствует 20, а не 00.

1

Помните, что '$' имеет особое значение в регулярных выражениях, например '.', '(', ')', '*' И многие другие. Вы должны бежать (например, «\ $») их, если вы не хотите, чтобы они были обработаны специально

+0

Хорошо, спасибо за то, что у меня в голове –

0

Попробуйте

import re 
string = '<option value="full_review">Detailed review (Up to $20.00)</option>' 
finded = re.findall("""value="full_review">Detailed review \(Up to \$([\d.].*)\)</option>""",string) 
print finded 
0

С (, ) и $ специальные символы в регулярных выражений узоров, вам нужно, чтобы избежать их \ в вашем шаблоне следующим образом:

detailint = re.findall("""value="full_review">Detailed review \(Up to \$(.*)\)</option>""", bidsrc) 

Другое дело, используя .* не самый лучший выбор, так как он будет захватывать любой символ. Это гораздо лучше использовать [\d]+ вместо, который будет захватывать по меньшей мере, один номер (* является 0 или более, + является 1 или более; \d означает любой числовой символ, и [] это набор символов):

detailint = re.findall("""value="full_review">Detailed review \(Up to \$([\d]+)\)</option>""", bidsrc) 

Подробнее на питоне повторно библиотеке: http://docs.python.org/library/re.html

0
import re 
s = "Detailed review (Up to $20.00)" 
re.findall("\$\d+\.\d+",s)[0][1:] 

дает 20.00 (включает в себя десятичную а)

Смежные вопросы