解析可变长度数据

时间:2018-10-31 17:18:42

标签: python regex string parsing

我使用的是RegEx相对较新的Python 3和Im。 我正在努力想出一种解决以下问题的好方法。 我有一个文本字符串(可以包含换行符等),其中包含几组信息。

例如:

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个字母字符,后跟一个空格并以'/'结尾 标签后面的数据可以是一个或多个单词(字母数字),并且被定义为在标签的“ /”之后直到下一个标签开始或字符串结束的所有数据。 < / p>

任何指针将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是实现您想要的想法的一种方法:

Executor executor = Executors.newFixedThreadPool(nThreads);

输出:

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 和超前的+?