gpt4 book ai didi

python - 如何使用关键字和索引提取子字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:41 28 4
gpt4 key购买 nike

我正在尝试从数据字符串中获取关键字后的某些子字符串。然后将这些收集到的子字符串连接在一起。

有没有比不使用正则表达式的多个 for 循环迭代更简单的方法?

我尝试拆分数据字符串(-> 单词列表),然后对其进行迭代以临时保存出现关键字的索引(在单词列表中)。

使用这些索引,我可以知道关键字 A 的子字符串在关键字 A 和关键字 B 的索引之间。所以我从列表中加入这些字符串。

这种方法似乎过于复杂。

data_string = "safpifucr keywordA: ejeca pfiktecr 3697406324 keywordB: 2505098781 epef ahemahkuj  keywordC: ezivwut 2564556750 inanrune"
keywords = ['keywordA:', 'keywordB:', 'keywordC:']
split_string = data_string.split()
keyword_index = []
# Getting the indexes of keywords
for index, word in enumerate(split_string, start=0):
if word in keywords:
keyword_index.append((word, index))


def getSubString(split_string, key_index, next_key_index):
subString = []
for index, sub in enumerate(split_string, start=0):
if index > key_index and index < next_key_index:
subString.append(sub)
return subString
# Get SubString after Keyword A
subA = getSubString(split_string, keyword_index[0][1], keyword_index[1][1])
print(' '.join(subA)) # ejeca pfiktecr 3697406324

# Get SubString after Keyword A
subB = getSubString(split_string, keyword_index[1][1], keyword_index[2][1])
print(' '.join(subB)) # 2505098781 epef ahemahkuj

# Get SubString after Keyword A
subC = getSubString(split_string, keyword_index[2][1], len(split_string))
print(' '.join(subC)) # ezivwut 2564556750 inanrune

我想知道是否有一种更简单的方法可以实现上述结果,而无需多次迭代 split_string。 (n*关键词)

更新

我需要这个来查看在一个连续字符串中包含所有交易信息的银行记录。各种相关信息都在关键字后面加一个冒号。出于各种原因,我不会分享确切的字符串,但我重建了一些结构相同的样本,只是虚构的内容。

# Approach 2 of blhsing with RANDOM-DATA
keywords = set(['Empfänger:', 'Verwendungszweck:', 'Zahlungsempfänger:', 'Auftraggeberinformation:', 'Zahlungsreferenz:'])
mapping = {}
keyword = None
data_list = (
'ONLINE BANKING VOM 1.10 UM 20:18 Empfänger: Henrietta Mullins Verwendungszweck: bestellung 57E639 2019-06-10 terriblesuccess.SG',
'SEPA Lastschrift Zahlungsempfänger: planetwötrap-AG Verwendungszweck: planetwötrap-AG-AG 460/487835-389 Ina Gill Auftraggeberinformation: 3740930917-909/387187-3',
'SEPA Lastschrift Zahlungsempfänger: AMAZON PAYMENTS EUROPE S.C.A. Verwendungszweck: 409-7235170-354760 AMZN Mktp FI 3882385979 Auftraggeberinformation: 6V0RRQCT6GAACLH8',
'POS 50,0648 FK K2 5.22 11:17 these cutting 5359')
for data_string in data_list:
for word in data_string.split():
if word in keywords:
keyword = word
print('if word in keywords: ', word)
elif keyword in mapping:
mapping[keyword] += ' ' + word
print('elif keyword in mapping: ', word)
elif keyword:
mapping[keyword] = word
print('elif keyword: ', word)
print(mapping)

这输出

{'Empfänger:': 'Henrietta Mullins', 'Verwendungszweck:': 'bestellung 57E639 2019-06-10 terriblesuccess.SG SEPA Lastschrift planetwötrap-AG-AG 460/487835-389 Ina Gill 409-7235170 -354760 AMZN Mktp FI 3882385979', 'Zahlungsempfänger:': 'planetwötrap-AG AMAZON PAYMENTS EUROPE S.C.A.', 'Auftraggeberinformation:': '3740930917-909/387187-3 SEPA Lastschrift 6V0RRQCT6GAA CLH8 POS 50,0648 FK K2 5.22 11:17 这些切割 5359'}

最佳答案

您可以将 re.findall 与通过加入关键字列表构建的交替模式一起使用,以构建将关键字映射到其值的字典:

import re
dict(re.findall(r'\b({0})\s+(.*?)\s*\b(?={0}|$)'.format('|'.join(map(re.escape, keywords))), data_string))

返回:

{'keywordA:': 'ejeca pfiktecr 3697406324',
'keywordB:': '2505098781 epef ahemahkuj',
'keywordC:': 'ezivwut 2564556750 inanrune'}

有了这个字典,输出每个给定关键字的值就变得微不足道了。

关于python - 如何使用关键字和索引提取子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044833/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com