2016-07-28 8 views
0

Это моя строка:Python регулярное выражение для остановки между

возраст: взрослый/ребенок пол: мужской/женский диапазон возраст: 3 - 5 лет/5 - 8 лет/8 - 12 лет/12 лет и старше Тип продукта: костюм характер: животные & насекомые материал: полиэстер тема: животное возраст старт: возраст 3 года: взрослые особенности: - поверхность видна через рот зебры. - Застежка-молния спереди и хвост сзади. -set включает: комбинезон и головную маску. -анимальная коллекция. возраст: - взрослый/ребенок. Пол Мужской Женский. возрастная группа: -3 - 5 лет/5 - 8 лет/8 - 12 лет/12 лет и старше

Я хочу поймать только выделенную часть с регулярным выражением python. Но я не в состоянии это сделать. Я использовал это регулярное выражение, но не работал вполне возможно. Мое регулярное выражение:

\bage[a-z]?\b.*\d+\s(?:years[a-z]?|yrs|month[a-z]+) 

Это получило странный ответ, поймав ненужную строку.

+0

Попробуйте [ ' возрастной диапазон:. *? up'] (https://regex101.com/r/xC3aD3/1) –

+0

Можно ли предположить, что «тип продукта» всегда будет следовать вашей нужной строке? –

+1

@ TheGr8Adakron ... Или вы проверяете или комментируете приведенные ниже ответы, если вы недовольны ими или редактируете свой вопрос с более подробной информацией. –

ответ

0

Вы можете попробовать эту модель с помощью re.search():

import re 

string = 'age: adult/child gender: male/female age range: 3 - 5 years/5 - 8 years/8 - 12 years/12 years and up product type: costume character: animals & insects material: polyester theme: animal age start: 3 years age end: adult features: -face is seen through the mouth of the zebra. -zipper closure in the front and a tail in the back. -set includes: jumpsuit and head mask. -animal collection. age: -adult/child. gender: -male/female. age range: -3 - 5 years/5 - 8 years/8 - 12 years/12 years and up' 
match = re.search(r'(age range:.*?) ', string) 
if match: 
    print(match.group(1)) 

Выход:

 
age range: 3 - 5 years/5 - 8 years/8 - 12 years/12 years and up 

Это основывается на предположении, что каждый элемент данных, разделенных два пространства, как показано в данном строка. Образец говорит, что соответствует строке age match:, за которой следует ноль или более символов (не жадный), за которым следует ровно 2 пробела.

0

Вы можете использовать следующее:

\bage range:\s*(?:\d+\s*-\s*\d+\s*y(?:ea)?rs/)+\d+\s*y(?:ea)?rs and up\b 

См Demo

0

Если "тип продукта" всегда следует нужную строку, то вы можете использовать lookahead assertion:

>>> r = re.search(r'(age range:.*?)(?= product type)', s) 
>>> r.group(1) 
'age range: 3 - 5 years/5 - 8 years/8 - 12 years/12 years and up' 

 Смежные вопросы

  • Нет связанных вопросов^_^