Python Regex-在两个不同序列首次出现之前获取数据

Python Regex-在两个不同序列首次出现之前获取数据,python,regex,Python,Regex,我得到一个字符串,其中包含有效代码,有时包含无效代码。每个字符串的结构都是…对111333555有效。字符串可以以句点结尾,也可以包含以下内容之一(3331、3332、5554除外)。、3331、5555除外。或除外(3331、5554)。在有效代码列表中。每个句子也可以有一些不相关的附加注释,但可以包含数字 示例:。。。111、222、333(3331、3332、3339除外)、444、555、77781和89。注:查阅432号文件 我需要解析字符串以获得有效数字代码列表以及异常列表。我已经用

我得到一个字符串,其中包含有效代码,有时包含无效代码。每个字符串的结构都是
…对111333555有效。字符串可以以句点结尾,也可以包含以下内容之一(3331、3332、5554除外)。
3331、5555除外。
除外(3331、5554)。
在有效代码列表中。每个句子也可以有一些不相关的附加注释,但可以包含数字

示例:
。。。111、222、333(3331、3332、3339除外)、444、555、77781和89。注:查阅432号文件

我需要解析字符串以获得有效数字代码列表以及异常列表。我已经用
^[^.]+
把所有的东西都记到了一个句号,除了
+?(?=except)
之外的所有东西都记到了单词前面,但是我不知道如何在
之前第一次获得有效的代码,除了
哪个先到

我希望在这篇文章中把句子分解一下,如果我能得到每个有效和无效代码都有一个正则表达式的数字,那将是理想的

import re

text = "Example: ... valid for 111, 222, 333 (except 3331, 3332, 3339), 444, 555, 77781, and 89. Note: Look up doc 432"

m = re.search(r'valid for ([^.]+)\.', text) #everything between  'valid for ' and first '.'
text1 = m.group(1)
valid_numbers = re.findall(r'\b\d+\b', text1) # first find all numbers
m = re.search(r'except([^.)]*)[.)]', text) # everything between 'except' and either ')' or '.'
text2 = m.group(1)
except_numbers = re.findall(r'\b\d+\b', text2) # find the "except" numbers
# remove the "except" numbers from valid_numbers
for i in range(len(valid_numbers) - 1, -1, -1):
    if valid_numbers[i] in except_numbers:
        del[valid_numbers[i]]
print(valid_numbers)
print(except_numbers)
印刷品:

['111', '222', '333', '444', '555', '77781', '89']
['3331', '3332', '3339']

来自:“由于正则表达式未完全标准化,因此所有带有此标记的问题还应包括一个指定适用编程语言或工具的标记。”请发布一篇文章,您是否意识到您的示例使用了排除
而非除
之外的
?非常好,谢谢。我知道这在很多正则表达式调用和循环中都是可能的,但我想要最干净的版本。这是一种更直接的方法。再次感谢。不要感谢我(不客气,顺便说一句),你可以接受这是“最好的解决方案”。参见。如果出现了更好的解决方案,你可以选择它作为新的最佳解决方案。因此,该网站发布的许多问题都被标记为“未回答”,因为OP(原始海报)从未接受过答案,尽管他通过评论说这是问题的解决方案。