在python正则表达式中使用OR的最佳方法是什么

时间:2016-02-09 02:08:23

标签: python regex python-2.7 python-2.x

我正在做正则表达式的功课,并在OR遇到一些困难。 给出以下字符串:

avc7fsrd5vcc12vfscsrwt1qw7eetrs&fsrsy
  

应该返回t1 s

fdjhads jhf&5672t3zcxvb,m654godjhfjdyeuyr123jfjjdjfjdfj77djsfhdjhfdsf99 
  

应该返回t3去123 77

第一部分是用一些数字提取t然后根据第一个提取s或go。如果它去了,那么我们需要在之后提取两个数字,否则停止。

这是我正在使用的正则表达式

 '(t[0-9]).*?(go).*?([0-9]+).*?([0-9]+)|(t[0-9]).*?(s)'

但是当我向第二个字符串添加s并且提取而不是s时,它不起作用。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

它相当简单。第一次轮换优先于第二次轮换 去之前确保没有s

(t[0-9])[^s]*?(go).*?([0-9]+).*?([0-9]+)|(t[0-9]).*?(s)

Formatted and tested:

    ( t [0-9] )                   # (1)
    [^s]*? 
    ( go )                        # (2)
    .*? 
    ( [0-9]+ )                    # (3)
    .*? 
    ( [0-9]+ )                    # (4)
 |  
    ( t [0-9] )                   # (5)
    .*? 
    ( s )                         # (6)

答案 1 :(得分:1)

在此处阅读regex

print re.findall(r'(t\d+).*?(s|go)\D*(\d*)\D*(\d*)', s)

输出:

[('t3', 'go', '123', '77')]

答案 2 :(得分:1)

我认为这是你需要的正则表达式:

                      (t\d+).*?(go|s)\D*?(\d*)\D*?(\d*)

如果我理解你的问题,它可以按照你的要求运作。

第一场比赛的演示: http://regexr.com/3coi0

第二场比赛的演示 : http://regexr.com/3coht

如需更多帮助理解高级正则表达式,我建议您阅读 https://www.talentcookie.com/2015/07/lets-practice-regular-expression https://www.talentcookie.com/2016/01/some-useful-regular-expression-terminologies/