Python 正则表达式-如何使用多个or条件进行解析?

Python 正则表达式-如何使用多个or条件进行解析?,python,regex,Python,Regex,如何使用多个或条件解析3个字符的alpha?所有文本均为大写[A-Z] +--------------------------------------------------+--------------------+ | string | expected | +--------------------------------------------------+--------------

如何使用多个
条件解析3个字符的alpha?所有文本均为大写[A-Z]

+--------------------------------------------------+--------------------+
|                      string                      |      expected      |
+--------------------------------------------------+--------------------+
| ABC DE YHU Q POLGHY11.32 2503.08SA YVR           | ABC, YHU, YVR      |
| ASD AS CCA420.30ASCAT189.72                      | ASD, CCA, CAT      |
| ASD AS CCA420.306DCAT189.72                      | ASD, CCA, CAT      |
| ASD AS CCA420.30D6CAT189.72                      | ASD, CCA, CAT      |
| SEE QA AMS ER STO Q SEESAW14.25M2475.45KL MLS BB | SEE, AMS, STO, MLS |
+--------------------------------------------------+--------------------+
条件

  • 单词边界中的3个字母

  • 3字母后跟数字
  • 3个字母前加2个字母数字,前面也可以有字符
  • 如果连续6个字母(例如
    POLGHY
    SEESAW
    ),则不匹配

对您的情况的字面解释如下:

(\b[A-Z]{3}\b)|([A-Z]{3})\d|[A-Z\d]{2}([A-Z]{3})
(?:\b|[A-Z\d]{2})([A-Z]{3})(?:\b|\d)
但从你的例子来看,你似乎更喜欢这样的东西:

(\b[A-Z]{3}\b)|([A-Z]{3})\d|[A-Z\d]{2}([A-Z]{3})
(?:\b|[A-Z\d]{2})([A-Z]{3})(?:\b|\d)
但是从给出的条件和例子来看,不清楚你的条件到底是什么

添加了注释后,您的目标似乎是:

(\b[A-Z]{3}\b)|(?:\b|[^A-Z](?:[A-Z\d]{2}))([A-Z]{3})\d
但情况更像是这样

  • 或者仅仅三个大写字母,或者
  • 三个大写字母后跟一个数字,可以在单词边界之后,也可以在前面加两个字母数字字符,而字母数字字符前面不能加大写字母

请注意,在这里的结果中,您将在第1组之后,而不是在整个匹配之后,这将包括前修复和后修复。

在示例中,我们在哪里看到“3个字母前加2个字母数字”的情况?还有,所谓“alpha”,你是指
[A-Za-z]
?还是更广泛的?(我希望最后一行是'ESA',因为它前面是'SE',而CAT前面不是'2 alpha'在第三行,但仍然匹配?很抱歉,这是
CAT
的,只有在前面有两个字母数字的情况下才能获取,但是前面也可以有其他文本。不知道如何解释,我可以更新条件这意味着,您还需要从第一个字符串获取
GHY
,从最后一个字符串获取
SAW
。对吗?如果不可以,为什么?如果您想从第3行开始,为什么不从第5行开始“SAW”呢?它前面有2个字母数字,
6D
,在第三行。我想排除6个连续的字母,如
POLGHY
SEESAW
,更新了条件她说“前面有2个字母数字”,所以应该是
[A-Z\d]{2}
你是对的,修复了这不是为第2-4行捕获的
CCA
,注意到并编辑了它-它现在被正确描述并符合你的要求。虽然我能想到一些边缘情况,你可能也不需要,但你必须更新示例。谢谢你!帮助我澄清并获得更好的描述和answ呃