Извлечение данных с помощью регулярных выражений Python

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

страница, которую я пытаюсь разобрать, имеет ряд продуктов, которые отображаются в следующем формате

"productId":"111111"

мне нужно извлечь все значения,111111 в этом случае.

4 ответов


t = "\"productId\":\"111111\""
m = re.match("\W*productId[^:]*:\D*(\d+)", t)
if m:
    print m.group(1)

смысл матча слов-символов (\W*), то productId с последующими символами без столбцов ([^:]*) и :. Затем сопоставьте не-цифры (\D*) и матч и захват следующих цифр ((\d+)).

выход

111111

что-то вроде этого:

In [13]: s=r'\"productId\":\"111111\"'

In [14]: print s
\"productId\":\"111111\"

In [15]: import re

In [16]: re.findall(r'\d+', s)
Out[16]: ['111111']

обратные косые черты здесь могут добавить путаницы, потому что они используются в качестве escape-символа как (не-raw) строками Python, так и синтаксисом regexp.

это извлекает идентификаторы продукта из формата, который вы опубликовали:

re_prodId = re.compile(r'\"productId\":\"([^"]+)\"')

сырая строка r'...' устраняет один уровень экранирования обратной косой черты; использование одной кавычки в качестве разделителя строк устраняет необходимость избегать двойных кавычек; и, наконец, обратная косая черта удваивается (только один раз) из-за их особое значение в языке регулярное выражение.

вы можете использовать объект regexp findall() метод поиска всех совпадений в некотором тексте:

re_prodId.findall(text_to_search)

это вернет список всех идентификаторов продукта.


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

 :\"(\d*)\"

приведите больше примеров ваших данных, если это не делает то, что вы хотите.