【发布时间】:2021-07-02 14:18:41
【问题描述】:
我的开始/结束魔术字符串(“X”和“Y”)有一个多行字符串。我正在尝试捕获所有事件,但遇到了一些问题。
这里是代码
testString = '''AAAAAXBBBBBYCCCCCXDDDDDYEEEEEEXFFF
FFFYGGG
'''
pattern = re.compile(r'(.*)X(.*)Y(.*)', re.MULTILINE)
match = re.search(pattern, testString)
print match.group(1) # output: AAAAAXBBBBBYCCCCC
print match.group(2) # output: DDDDD
print match.group(3) # output: EEEEEEXFFF
基本上,我正在尝试捕获以下所有出现的情况(并且我必须保持文本顺序):
- 魔术起始字符串之前的文本(例如:AAAAA、CCCCC、EEEEEE)
- 开始/结束魔术字符串之间的文本(例如:BBBBB、DDDDD、FFF\nFFF)
- 魔术起始字符串后的文本(例如:CCCCC、GGG)
所以我正在尝试打印以下输出:(下面括号中的内容只是注释)
AAAAA (before magic string)
BBBBB (between magic strings)
CCCCC (before/after magic strings, it does not matter. Just the order matters.)
DDDDD (after magic string)
等等。按该顺序打印它们将解决问题。 (然后我可以将每个函数传递给其他函数,...等)
当文本像“AAXBBYCC”这样简单时,代码可以很好地工作,但是对于复杂的字符串,我会失去控制。
有什么想法或替代方法吗?
【问题讨论】:
-
那些“复杂的字符串”到底是什么,您的确切预期输出是什么?例如,可能存在歧义和/或交错出现,如
X1X2Y3X4Y -
我使用代码中的 testString 示例编辑了原始帖子。我想在之前或之后获取所有出现的文本,没关系。我想在他们每个人之间获取文本。它基本上用于解析器中以进行进一步的文本处理。 (所以我必须保持处理文本的顺序)。
-
你写的在魔法开始之后,你的意思是在魔法结束之后吗?你为什么不在那里包含 EEEEEE?
-
@j0kzy 是什么让你接受这个特定的答案,因为它似乎没有给出你在问题中所说的想要的输出?
标签: python-3.x regex