2015-12-14 4 views
0

RegEx Expression:RegEx Python вопрос

[Height|Length|Width|Depth]:\D*\s*(\d*\.*-*\d*)-*\D*\s* [Height|Length|Width|Depth]:\D*\s*(\d*\.*-*\d*)-*\D*\s*[Height|Length|Width|Depth]:\D*\s*(\d*\.*-*\d)*-*\D*\s* 

ввода текста - JSON TEXT

{"Product Type":["Printer Cartridges"],"Product Name":["Xerox - Yellow - toner cartridge (equivalent to: HP CB382A) - for HP Color LaserJet CM6030 CM6040 CP6015"],"Brand":["XEROX"],"Product Long Description":["<!-- CNET Content -->Toner cartridges for HP printers from Xerox deliver brilliant image quality and excellent reliability at a low cost. Compared to the original HP toner cartridge youll get better or equal page yield pay around 25% less. Get more pay less without risk.<br><br><h3 id=detailspecs>Specifications</h3><span class=font_size3bold>General</span><br>&nbsp;<img align=absmiddle src=http://images.highspeedbackbone.net/main/gfx-blkbullet.jpg>&nbsp;&nbsp;Compatible Cartridge: &nbsp;HP CB382A<br><br><span class=font_size3bold>Consumable</span><br>&nbsp;<img align=absmiddle src=http://images.highspeedbackbone.net/main/gfx-blkbullet.jpg>&nbsp;&nbsp;Consumable Type: &nbsp;Toner cartridge<br>&nbsp;<img align=absmiddle src=http://images.highspeedbackbone.net/main/gfx-blkbullet.jpg>&nbsp;&nbsp;Printing Technology: &nbsp;Laser<br>&nbsp;<img align=absmiddle src=http://images.highspeedbackbone.net/main/gfx-blkbullet.jpg>&nbsp;&nbsp;Color: &nbsp;Yellow<br>&nbsp;<img align=absmiddle src=http://images.highspeedbackbone.net/main/gfx-blkbullet.jpg>&nbsp;&nbsp;Included Qty: &nbsp;1-pack<br>&nbsp;<img align=absmiddle src=http://images.highspeedbackbone.net/main/gfx-blkbullet.jpg>&nbsp;&nbsp;Duty Cycle: &nbsp;Up to 23500 pages at 5% coverage<br><br><span class=font_size3bold>Compatibility Information</span><br>&nbsp;<img align=absmiddle src=http://images.highspeedbackbone.net/main/gfx-blkbullet.jpg>&nbsp;&nbsp;Compatible with: &nbsp;HP Color LaserJet CM6030 MFP CM6030f MFP CM6040 MFP CM6040f MFP CP6015de CP6015dn CP6015n CP6015x CP6015xh<br><!-- END CNET Content -->"],"Item ID":["41057188"],"Product Segment":["Electronics"],"UPC":["095205855838"]} 

Проблема:

RegEx следует проверить в JSON текста, если один из этих words --> (Height or Width or Length or Depth) есть то выберите значение.

Поскольку данный текст JSON не имеет такого значения, он не должен ничего находить, но мой RegEx находит нежелательное значение. Я думаю, что я что-то пропускаю в RegEx.

Edit:

Для этого входного JSON - я должен быть в состоянии извлечь высота, длина, ширина или глубина:

{"Brand":["Concord Fans"],"Energy Guide: Appliance Labeling Rule Required":["N"],"Country of Origin: Components":["USA and/or Imported"],"Product Short Description":["Height: 6.2."],"Actual Color":["Multicolor"],"Product Segment":["Clothing, Shoes & Accessories"],"Color":["Multicolor"],"Product Name":["Concord Fans RM-08 Remote & Wall Control Set"],"Product Type":["Televisions"],"Manufacturer Part Number":["RM-08"],"Manufacturer":["Concord Fans"],"Category":["TVs"],"Product Long Description":["Height: 6-2- Width: 8-8- Length: 8-8- Energy Star: No- Energy Saver: No- UL Classification: UL Certified- UL Application: Dry SKU: CNCD467"],"GTIN":["00014592213038"],"Number of Batteries":["0"],"E-Waste Recycling Compliance Required":["N"],"UPC":["014592213038"]} 
+1

Вы пытались использовать библиотеку json? https://docs.python.org/3/library/json.html – Macabeus

+1

Можете ли вы привести пример нежелательного значения и образец JSON, который вернул это значение? –

+0

Нежелательное значение Я запускаю это регулярное выражение, а значение ввода: ['1-', '', '23500'] – user5431918

ответ

1

Это не очень хорошая идея, в общем, для разбора JSON данные с регулярными выражениями, но вы определенно есть что-то неправильно в этой части регулярного выражения:

[Height|Length|Width|Depth] 

Это, к примеру, соответствует один «H»:

>>> re.search("[Height|Length|Width|Depth]", "H").group() 
'H' 

Похоже, вы в виду использовать non-capturing group here:

(?:Height|Length|Width|Depth) 

Смотрите также:

+0

Я обновил свое сообщение на примере, который должен иметь возможность извлекать информацию. Можете ли вы предложить. – user5431918

1

Похоже, что ваши данные в формате JSON compatiable- Так что попробуйте json модуль - Подробнее here. После преобразования в формат JSON можно получить доступ с помощью регулярного словаря ключ в d['Product Long Description'] и после этого вы можете использовать много способов, чтобы извлечь какую-либо информацию из этого - я только что показал один способ Перейти-

import json,re 

s = """{"Brand":["Concord Fans"],"Energy Guide: Appliance Labeling Rule Required":["N"],"Country of Origin: Components":["USA and/or Imported"],"Product Short Description":["Height: 6.2."],"Actual Color":["Multicolor"],"Product Segment":["Clothing, Shoes & Accessories"],"Color":["Multicolor"],"Product Name":["Concord Fans RM-08 Remote & Wall Control Set"],"Product Type":["Televisions"],"Manufacturer Part Number":["RM-08"],"Manufacturer":["Concord Fans"],"Category":["TVs"],"Product Long Description":["Height: 6-2- Width: 8-8- Length: 8-8- Energy Star: No- Energy Saver: No- UL Classification: UL Certified- UL Application: Dry SKU: CNCD467"],"GTIN":["00014592213038"],"Number of Batteries":["0"],"E-Waste Recycling Compliance Required":["N"],"UPC":["014592213038"]}""" 

d=json.loads(json.loads(json.dumps(s))) 
print d['Product Long Description'] 
print ''.join(d['Product Long Description']).split(":")[0:4] 
print [filter(len,y) for y in re.findall(r'Height:\s*([\d.]+-[\d.]+)|Width:\s*([\d.]+-[\d.]+)|Length:\s*([\d.]+-[\d.]+)',''.join(d['Product Long Description']))] 

output-

[u'Height: 6-2- Width: 8-8- Length: 8-8- Energy Star: No- Energy Saver: No- UL Classification: UL Certified- UL Application: Dry SKU: CNCD467'] 
[u'Height', u' 6-2- Width', u' 8-8- Length', u' 8-8- Energy Star'] 
[(u'6-2',), (u'8-8',), (u'8-8',)] 
+0

Я не понял последнее заявление печати, как выложил u. это будет полезно, если вы сможете объяснить кратко. – user5431918

+0

'r '\ w +:'' означает разделение строки на ':', которые имеют один или несколько слов char i.e. a-z и 0-9 раньше. – SIslam

+0

OK я отредактировал ответ !! – SIslam