我使用的是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

实际上,标签本身也是可变的。大多数是3个字符后跟“/”,但不是全部。有些是4、5和6个字符长。但是所有的后面都跟着“/”,除了第一个之外,所有的前面都有一个空格
更新的信息
我已经更新了示例以显示这些变量标记。但是要澄清一个标记可以是1-8个字母字符,前面是空格,结尾是“/”
标记后的数据可以是一个或多个单词(字母数字),并定义为在标记的“/”后面一直到下一个标记开始或字符串结束的所有数据。
任何指点都非常感谢。

最佳答案

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

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

重要的位是非贪婪限定符+?和lookahead(?=$|\s+\w+/)

关于python - 解析可变长度数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53088887/

10-11 23:17
查看更多