Python 熊猫:找到一个字符串的第一个出现处,然后获取其后的所有字符,直到另一个字符串出现为止

Python 熊猫:找到一个字符串的第一个出现处,然后获取其后的所有字符,直到另一个字符串出现为止,python,pandas,substring,Python,Pandas,Substring,我希望用另一列中包含的字符串的ISIN或CUSIP部分更新列: my_DestSystemNote1_string = 'ISIN=XS1906311763|CUSIP= |CalTyp=1' dfDest = [('DestSystemNote1', ['ISIN=XS1906311763|CUSIP= |CalTyp=1', 'ISIN=XS0736418962|CUSIP= |

我希望用另一列中包含的字符串的ISIN或CUSIP部分更新列:

my_DestSystemNote1_string =  'ISIN=XS1906311763|CUSIP=         |CalTyp=1'
dfDest = [('DestSystemNote1', ['ISIN=XS1906311763|CUSIP=         |CalTyp=1', 
                               'ISIN=XS0736418962|CUSIP=         |CalTyp=1', 
                               'ISIN=XS1533910508|CUSIP=         |CalTyp=1', 
                               'ISIN=US404280AS86|CUSIP=404280AS8|CalTyp=1', 
                               'ISIN=US404280BW89|CUSIP=404280BW8|CalTyp=21',
                               'ISIN=US06738EBC84|CUSIP=06738EBC8|CalTyp=21',
                               'ISIN=XS0736418962|CUSIP=         |CalTyp=1',]),
         ]
# create pandas df
dfDest = pd.DataFrame.from_items(dfDest)
display(dfDest)
print("")
DestSystemNote1
包含需要从中提取ISIN或CUSIP的源字符串:

DestSystemNote1                                Found_ISIN    Found_CUSIP
ISIN=XS1906311763|CUSIP=         |CalTyp=1     XS1906311763
ISIN=XS0736418962|CUSIP=         |CalTyp=1     XS0736418962
ISIN=XS1533910508|CUSIP=         |CalTyp=1     XS1533910508
ISIN=US404280AS86|CUSIP=404280AS8|CalTyp=1     US404280AS86  404280AS8
ISIN=US404280BW89|CUSIP=404280BW8|CalTyp=21    US404280BW89  404280BW8
ISIN=US06738EBC84|CUSIP=06738EBC8|CalTyp=21    US06738EBC84  06738EBC8
ISIN=XS0736418962|CUSIP=         |CalTyp=1     XS0736418962
ISIN的前面总是加上“ISIN=”并在“|”之前结束字符

CUSIPS的前面总是加上“CUSIP=”并在“|”之前结束一个字符

我的尝试如下:

my_DestSystemNote1_string =  'ISIN=XS1906311763|CUSIP=         |CalTyp=1'
code = my_DestSystemNote1_string.split("ISIN=",1)[1]
code = code[:12]
print(code)

XS1906311763
因此,我现在就要开始了,但我想对它进行参数化,以找到传递字符串的第n次出现(strStart),然后获取它的结束字符+1到,但不包括在内的所有字符;第n次出现另一个字符串(strEnd)

皮特从这个答案开始工作():


你能给我们更多关于你的输出和输入的详细信息吗?好的,这可能会帮助你谢谢@Karl,太好了。不用担心。请给出我用来增加我的选票的答案。这绝对是更难的部分!嘿@Karl,我只是想为ISN专栏实现这一点。我没有收到任何被退回的记录。这是我的调用:dfDest['FOUND_ISIN']=''对于索引,dfDest.iterrows()中的行:try:print(row.DestSystemNote1)row.FOUND_ISIN2=split_之间(dfDest.DestSystemNote1,“ISIN=”,1,“|”,1)print('DestSystemNote1='+row.DestSystemNote1++'FOUND_ISIN='+dfDest.FOUND|ISIN=”)除了:pass#在异常显示(dfDest)上不执行任何操作当然应该…在(row.DestSystemNote1,“ISIN=”,1,“|”,1)之间分割。。。?即,将“dfDest”替换为“row”
def findnth(haystack, needle, n):
    parts= haystack.split(needle, n+1)
    if len(parts)<=n+1:
        return -1
    return len(haystack)-len(parts[-1])-len(needle)
def split_between(input_string, start_str, start_occurence, end_str, end_occurence):
    start_index = findnth(input_string, start_str, start_occurence-1) + len(start_str)
    end_index = findnth(input_string, end_str, end_occurence-1)
    return input_string[start_index:end_index]

input_string="ISIN=111111|ISIN=222222|333333|ISIN=444444"

split_between(input_string, "ISIN=", 2, "|", 2)
# returns "222222"