正则表达式问题解决两个条件

时间:2018-11-27 17:56:42

标签: python regex

这是问题所在。我需要编写一个正则表达式来突出显示以下文本中的所有项目:

AAAAB

但不包含以下内容:

ABABA

我的第一个想法是使用A?B?,但那没有用。任何帮助/解释将不胜感激

3 个答案:

答案 0 :(得分:2)

假设您只想匹配AAAAB,而不管其相对于其他文本的位置,则可以使用正则表达式:

A{4}B

在这里,A匹配字符A,{4}匹配前面的4个项目(因此,在这种情况下为字符串AAAA),B匹配一次出现的字符B,只要它位于字符AAAA的序列之后。这将与序列ABABA不匹配。

答案 1 :(得分:0)

如果您的问题只是想要在B之前重复A的实例,那很容易:

import re
match = re.compile('AA+?B')
match.match('AAAAB') #Finds a match
match.match('ABAB') #Finds no match

如果这不是您想要的内容,则需要更加明确地说明预期的输出,并可能提供更多示例。

答案 2 :(得分:0)

我想,您不仅要匹配四次A和一个B , 而是:

  • A的非空序列。
  • 然后是B的非空序列。
  • 仅此而已。那里之前或之后 可以出现任何其他字母/数字。

如果以上公式正确,请使用:

^A+B+$

请注意^$锚的用法。

另一个假设:将上述序列作为单个单词, 即可以有其他“环绕”文本,但不能包含字母或数字 可以保持在此字符串的相邻位置(尽管可以 用空格隔开)。

在这种情况下,请使用:

\bA+B+\b

这次,我们使用^-单词代替$\b锚 边界标记。