Как взять число из строки с помощью регулярных выражений? - PullRequest
0 голосов
/ 18 января 2012

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

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

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

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

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

Ответы [ 6 ]

3 голосов
/ 18 января 2012

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

r"""value="full_review">Detailed review \(Up to \$([\d.]+)\)</option>"""
1 голос
/ 18 января 2012

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

1 голос
/ 18 января 2012

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

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

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

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

0 голосов
/ 18 января 2012
import re
s = "Detailed review (Up to $20.00)"
 re.findall("\$\d+\.\d+",s)[0][1:]

Дает вам 20,00 (включая десятичные)

0 голосов
/ 18 января 2012

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

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)

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

0 голосов
/ 18 января 2012

Попробуйте это

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
...