在python中尝试匹配字符串中两个系列的第一个字符

在python中尝试匹配字符串中两个系列的第一个字符,python,regex,Python,Regex,尝试匹配字符串中由噪声字符分隔的“foo”或“bar”的第一个实例,如“basdldfnmoor”,它应首先匹配“bar”,为强调起见大写:“basdldfnmoor” 它保证包含一个或两个“foo”或“bar”,并且所有垃圾字符都是[a-z] 这是我的正则表达式/函数 def first_foobar(mystring): foo = re.search("\w*?(f)\w*?(o)\w*?(o)|\w*?(b)\w*?(a)\w*?(r)",mystring) if foo

尝试匹配字符串中由噪声字符分隔的“foo”或“bar”的第一个实例,如“basdldfnmoor”,它应首先匹配“bar”,为强调起见大写:“basdldfnmoor”

它保证包含一个或两个“foo”或“bar”,并且所有垃圾字符都是[a-z]

这是我的正则表达式/函数

def first_foobar(mystring):
    foo = re.search("\w*?(f)\w*?(o)\w*?(o)|\w*?(b)\w*?(a)\w*?(r)",mystring)
    if foo.group(1) == "f":
        return("foo")
    else:
        return("bar")
我做错了什么?有没有更像蟒蛇的方法?它似乎从来都不匹配后的第二个正则表达式|

def first_foobar(mystring):
    foo = re.search("\w*?(f)\w*?(o)\w*?(o)|\w*?(b)\w*?(a)\w*?(r)",mystring)
    if foo.group(1) == "f":
        return("foo")
    elif foo.group(4) == "b":
        return("bar")

bar
中的
b
将在
4th
组中使用,
x=next(如果I为foo.groups()中的I为I);如果x='b':print'bar'elif x='f':print'foo'
@AvinashRaj是的,我们可以这样做,但我想OP需要理解
b
并且
f
将不在
组(1)
中,那么你需要解释为什么
b
存在于第四组中。也就是说,在
b
(第4组)之前定义的第1、2、3组没有。@AvinashRaj如果OP要求,我会的……到目前为止,我觉得这是自我解释。嗨,谢谢你的回答。我理解。我原以为(1)会是它匹配的正则表达式的第一个字符,但它把所有东西都当作一个大正则表达式,所以b a r在4、5和6中。