Sagen, ich habe zwei Arten von Strings:Python regulärer Ausdruck mit oder und re.search
str1 = 'NUM-140 A Thing: Foobar Analysis NUM-140'
str2 = 'NUM-140 Foobar Analysis NUM-140'
für beide, ich will 'Foobar'
passen (was alles sein könnte). Ich habe folgendes versucht:
m = re.compile('((?<=Thing:).+(?= Analysis))|((?<=\d).+(?= Analysis))')
ind1 = m.search(str1).span()
match1 = str1[ind1[0]:ind1[1]]
ind2 = m.search(str2).span()
match2 = str2[ind2[0]:ind2[1]]
jedoch match1 kommt zu 'A Thing: Foobar'
, die das Spiel für das zweite Muster zu sein scheint, nicht der erste. Einzeln angewendet (Muster 1 bis str1
und Muster 2 bis str2
, ohne |
), entsprechen beide Muster 'Foobar'
. Ich habe damit gerechnet, dass dies aufhört, wenn das erste Muster übereinstimmt. Dies scheint nicht der Fall zu sein. Was vermisse ich?
Das Problem ist, dass in der 7. Position (während des Zeichen raubend ' 0 ') die Regex kann das Match schon machen. – horcrux
Oh, das stimmt. Die erste Übereinstimmung, die es findet, ist _is_ mit dem zweiten Muster. Irgendwie hat das verpasst. – dieggsy
hast du 're.compile (". * Foobar. * ") Versucht' –