Adding tuple support to str.find() & str.rfind() would improve readability and performance.
Work in progress implementation: GitHub - nineteendo/cpython at extend-str-and-bytes
According to my benchmark, it’s superior to all alternatives:
import re
PATTERN = re.compile(r"\\|/")
def find1(p):
    seps = "\\/"
    i, n = 1, len(p)
    while i < n and p[i] not in seps:
        i += 1
    return i
def find2(p):
    match = PATTERN.search(p)
    i = match.start() if match else len(p)
    return i
def find3(p):
    sep = "\\"
    altsep = "/"
    i = p.find(sep)
    new_i = p.find(altsep)
    if new_i >= 0 and (new_i < i or i < 0):
        i = new_i
    if i < 0:
        i = len(p)
    return i
def find4(p):
    seps = ("\\", "/")
    i = p.find(seps)
    if i < 0:
        i = len(p)
    return i
def rfind1(p):
    seps = "\\/"
    i = len(p)
    while i and p[i-1] not in seps:
        i -= 1
    return i
def rfind2(p):
    match = PATTERN.search(p[::-1])
    i = len(p) - match.start() if match else 0
    return i
def rfind3(p):
    sep = "\\"
    altsep = "/"
    i = max(p.rfind(sep), p.rfind(altsep)) + 1
    return i
def rfind4(p):
    seps = ("\\", "/")
    i = p.rfind(seps) + 1
    return i
find
1 character
2000000 loops, best of 5: 119 nsec per loop # while loop
1000000 loops, best of 5: 357 nsec per loop # regex
1000000 loops, best of 5: 203 nsec per loop # 2 finds
2000000 loops, best of 5: 113 nsec per loop # tuple
10 characters 
500000 loops, best of 5: 615 nsec per loop # while loop
1000000 loops, best of 5: 395 nsec per loop # regex
1000000 loops, best of 5: 214 nsec per loop # 2 finds
2000000 loops, best of 5: 123 nsec per loop # tuple
100 characters 
50000 loops, best of 5: 5.48 usec per loop # while loop
500000 loops, best of 5: 769 nsec per loop # regex
1000000 loops, best of 5: 218 nsec per loop # 2 finds
2000000 loops, best of 5: 126 nsec per loop # tuple
rfind
1 character 
2000000 loops, best of 5: 164 nsec per loop # while loop
500000 loops, best of 5: 470 nsec per loop # regex
2000000 loops, best of 5: 164 nsec per loop # 2 finds
2000000 loops, best of 5: 102 nsec per loop # tuple
10 characters 
500000 loops, best of 5: 692 nsec per loop # while loop
500000 loops, best of 5: 518 nsec per loop # regex
2000000 loops, best of 5: 172 nsec per loop # 2 finds
2000000 loops, best of 5: 111 nsec per loop # tuple
100 characters 
50000 loops, best of 5: 5.74 usec per loop # while loop
200000 loops, best of 5: 1.01 usec per loop # regex
1000000 loops, best of 5: 280 nsec per loop # 2 finds
1000000 loops, best of 5: 219 nsec per loop # tuple