Python3中这个模式的正则表达式是什么?

时间:2017-08-16 19:42:11

标签: regex string python-3.x

s = "ababa"

我使用了以下正则表达式:

match = re.search(r'(ab|ba)+', s)

但我得到的输出是:

abab

虽然我希望它(它应该检测替代字符):

ababa

请原谅我,如果它看起来很傻,但我是一个正则表达式noob。

3 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

r'(a(ba)*b?|b(ab)*a?)'

这将匹配以a或b开头的模式,以及之后两者之间的任意数量的替换。

答案 1 :(得分:0)

我认为你正在寻找(一般方式):

((.)(?!\2).)(?:\1+\2?|\2)

demo

这意味着:

(                # capture group 1: group of two different characters
    (.)          # capture group 2: first character
    (?!\2).      # a character that isn't the same of the character in group 2 
)                # close capture group 1
(?:              # two possibilities:
    \1+\2?       # repeat the group 1 (at least once) with an optional first character at the end
  |              # OR
    \2           # the first character
)

使用固定字符(ab):

a(?:ba)*b?|b(?:ab)*a?

a(?:ba)+b?|b(?:ab)+a?

(至少三个字符。)

答案 2 :(得分:0)

我的方法:

(.)(.)(?:\1\2)+\1?

A后跟B,然后是一个或多个A-then-B,可能还有另一个A.

Demo