Python - 根据列表中首次出现的字符剪切字符串

Python - Cut string based on first occurrence of characters in list

我在列中有一些值,例如

data1 = "any_number_of_characters&wanted=gsjgj87-hdjh_66&"
data2 = "any_number_of_characters&wanted=g232gj87-hdjh_66#dhvdhohoh"
data3 = "any_number_of_characters&wanted=gsjgj87-hdjh_66?uhdjd=skjhnknkn"

考虑到这是一个接一个循环中的同一字段。 现在我在上面的字符串中找到值字符串 'wanted=' 然后想要值直到我找到 '&' 或 '#' 或 '?'

如果我在 if-else 循环中执行此操作,由于角色外观的不可预测性,它适用于一个角色,但对其他角色无效。

我想在不像 find() 函数那样逐个字符地迭代的情况下实现这一点,但我无法从这 3 个字符中搜索第一次出现的单个字符。

您可以搜索 wanted 之后最接近您要搜索的字符串的任何停止字符:

data1 = "any_number_of_characters&wanted=gsjgj87-hdjh_66&"
data2 = "any_number_of_characters&wanted=g232gj87-hdjh_66#dhvdhohoh?uhdjd=skjhnknkn"
data3 = "any_number_of_characters&wanted=gsjgj87-hdjh_66?uhdjd=skjhnknkn#dhvdhohoh"


def extractData(data, startPattern, endCharacters='&#?'):
    start = data.find(startPattern)
    end = min(
        [
            pos if -1 <
            (pos := data.find(ec, start + 1)) > start else len(data)
            for ec in list(endCharacters)
        ]
    )
    return (data[start + len(startPattern):end])


for data in (data1, data2, data3):
    print(extractData(data, 'wanted='))

输出:

gsjgj87-hdjh_66
g232gj87-hdjh_66
gsjgj87-hdjh_66