Регулярное выражение Python, чтобы получить первое вхождение только из данных электронной торговли внутри тега script - PullRequest
0 голосов
/ 20 декабря 2018

Я использую это регулярное выражение для получения данных с веб-сайта электронной коммерции, в котором есть обязательные данные внутри тега скрипта - "quantity":"(.*?)"

Это регулярное выражение дает мне все совпадения вданные.

Я пробовал много способов построить его, используя не жадный метод, но не повезло.Какое выражение следует использовать, чтобы остановить поиск при первом совпадении по данным? TIA

sample Данные сценария:

 ({{ HOLIDAY","on_sale":false,"quantity":"214","original_price":35,"price":35,"category_path":["Mens","Tees"],"created":"2018-12-01","modified":"2018-12-20","colors":["BLACK"],"sizes":["S","M","L","XL","XXL"],"upcs":["00000000190235804075","00000000190235804082","00000000190235804099","00000000190235804105","00000000190235804112"],"variations":[{"upc":"00000000190235804075","color":"BLACK","size":"S","on_sale":false,"quantity":"31","original_price":35,"price":35},{"upc":"00000000190235804082","color":"BLACK","size":"M","on_sale":false,"quantity":"67","original_price":35,"price":35},{"upc":"00000000190235804099","color":"BLACK","size":"L","on_sale":false,"quantity":"80","original_price":35,"price":35},{"upc":"00000000190235804105","color":"BLACK","size":"XL","on_sale":false,"quantity":"33","original_price":35,"price":35},{"upc":"00000000190235804112","color":"BLACK","size":"XXL","on_sale":false,"quantity":"3","original_price":35,"price":35}]}

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы можете попробовать это:

"quantity":"(.*?)".*
0 голосов
/ 20 декабря 2018

Здесь есть 2 подхода:

(лучше) Подход без регулярных выражений

"Текст", который вы пытаетесь сопоставить, выглядит (почти) как действительныйОбъект JSON / словарь Python (за исключением некоторых дополнительных скобок и части HOLIDAY, которая может происходить из-за плохого копирования).

Используйте этот факт, чтобы преобразовать его в объект, а затем просто наберите ключ 'quantity' верхнего уровня:

d = {'category_path': ['Mens', 'Tees'],
     'colors': ['BLACK'],
     'created': '2018-12-01',
     'modified': '2018-12-20',
     'on_sale': 'false',
     'original_price': 35,
     'price': 35,
     'quantity': '214',
     'sizes': ['S', 'M', 'L', 'XL', 'XXL'],
     'upcs': ['00000000190235804075',
      '00000000190235804082',
      '00000000190235804099',
      '00000000190235804105',
      '00000000190235804112'],
     'variations': [{'color': 'BLACK',
                     'on_sale': 'false',
                     'original_price': 35,
                     'price': 35,
                     'quantity': '31',
                     'size': 'S',
                     'upc': '00000000190235804075'},
                     ...,
                     {'color': 'BLACK',
                     'on_sale': 'false',
                     'original_price': 35,
                     'price': 35,
                     'quantity': '3',
                     'size': 'XXL',
                     'upc': '00000000190235804112'}]}

print(d['quantity'])
# 214

(В крайнем случае) Подход Regex

Если вы настаиваете, вы можете использовать re.search, который по умолчанию останавливается на первом совпадении, как написано в его документации :

Просматривать строку в поисках первогоместо, где шаблон регулярного выражения производит совпадение

import re

text = """ ({{ HOLIDAY","on_sale":false,"quantity":"214","original_price":35,"price":35,"category_path":["Mens","Tees"],"created":"2018-12-01","modified":"2018-12-20","colors":["BLACK"],"sizes":["S","M","L","XL","XXL"],"upcs":["00000000190235804075","00000000190235804082","00000000190235804099","00000000190235804105","00000000190235804112"],"variations":[{"upc":"00000000190235804075","color":"BLACK","size":"S","on_sale":false,"quantity":"31","original_price":35,"price":35},{"upc":"00000000190235804082","color":"BLACK","size":"M","on_sale":false,"quantity":"67","original_price":35,"price":35},{"upc":"00000000190235804099","color":"BLACK","size":"L","on_sale":false,"quantity":"80","original_price":35,"price":35},{"upc":"00000000190235804105","color":"BLACK","size":"XL","on_sale":false,"quantity":"33","original_price":35,"price":35},{"upc":"00000000190235804112","color":"BLACK","size":"XXL","on_sale":false,"quantity":"3","original_price":35,"price":35}]}"""

print(re.search(r'"quantity":"(.*?)"', text).group(1))
# 214
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...