Разбор данных переменной длины - PullRequest
0 голосов
/ 31 октября 2018

Я использую Python 3, и я относительно новичок в RegEx. Я изо всех сил пытаюсь найти хороший способ решить следующую проблему. У меня есть текстовая строка (которая может включать разрывы строк и т. Д.), Которая содержит несколько наборов информации.

Например:

TAG1/123456 TAG2/ABCDEFG HISTAG3/A1B1C1D1 QWERTY TAG4/0987654321 
TAG5/THE CAT SAT ON THE MAT MYTAG6/FLINTSTONE 
TAG7/99887766AA

Мне нужно проанализировать следующее

TAG1/123456

TAG2/ABCDEFG

HISTAG3/A1B1C1D1 QWERTY

TAG4/0987654321

TAG5/THE CAT SAT ON THE MAT

MYTAG6/FLINTSTONE

TAG7/99887766AA

Я не могу понять, как обращаться с тегами переменной длины :( TAG3 и TAG5 Я всегда заканчиваю тем, что захватывал следующий тег, т.е.

TAG5/THE CAT SAT ON THE MAT TAG6

На самом деле сами TAG также являются переменными. Большинство из них состоят из 3 символов, за которыми следует «/», но не все. Некоторые из них имеют длину 4, 5 и 6 символов. Но за всеми следует '/', и за исключением того, что перед первым стоит пробел

Обновленная информация Я обновил пример, чтобы показать эти переменные теги. Но для пояснения тега можно использовать 1-8 буквенных символов, начинающихся с пробела и оканчивающихся на «/». Данные после тега могут быть одним или несколькими словами (буквенно-цифровыми) и определяются как все данные, которые следуют за '/' тега до начала следующего тега или до конца строки .

Любые указатели будут с благодарностью.

1 Ответ

0 голосов
/ 31 октября 2018

Это один из способов добиться того, чего вы хотите, я думаю:

import re

s = """TAG1/123456 TAG2/ABCDEFG TAG3/A1B1C1D1 QWERTY TAG4/0987654321 
TAG5/THE CAT SAT ON THE MAT TAG6/FLINTSTONE 
TAG7/99887766AA"""
r = re.compile(r'\w+/.+?(?=$|\s+\w+/)')
tags = r.findall(s)
print(*tags, sep='\n')

Выход:

TAG1/123456
TAG2/ABCDEFG
TAG3/A1B1C1D1 QWERTY
TAG4/0987654321
TAG5/THE CAT SAT ON THE MAT
TAG6/FLINTSTONE
TAG7/99887766AA

Важными битами являются не жадный квалификатор +? и прогноз (?=$|\s+\w+/).

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