Извлечение данных с помощью регулярных выражений 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*)\"
приведите больше примеров ваших данных, если это не делает то, что вы хотите.