首页 > 解决方案 > 检查特定字符串是否存在于文本中的第一个或第二个位置

问题描述

我正在尝试在数据框“名称”的整个列中查找字符串列表。如果特定字符串存在于第一个或第二个位置,那么它应该用该特定字符串替换列的文本值并将其存储在另一列中。

为此,我正在使用正则表达式。下面是我的代码。但是,在输出表中,我将“MEDICO SYSTEMS FUJI”匹配为“FUJI”,但我的要求是它存在于第三个位置,它应该返回“NA”。类似地,文本“SAFEAIR TERM LTD CONTRACTORS”与“LTD CONTRACTORS”匹配。它应该显示 NA 因为位置是第 3 位。

请从现有脚本和我想要的输出表中检查我当前的输出表。

df = pd.DataFrame({'Name': ['KK FUJI PARLIGHT','NORTHWINDS ABATEMENT LLC',
'SAFEAIR TERM LTD CONTRACTORS','MEDICO SYSTEMS FUJI','TOKAI','FUJI CONTRACTOR']})

strings = ['FUJI','NORTHWINDS ABATEMENT','LTD CONTRACTORS']
pattern = '|'.join(strings)

def pattern_searcher(search_str:str, search_list:str):

    search_obj = re.search(re.compile(r'\b({0})\b'.format(search_list),flags=re.IGNORECASE), search_str)
    if search_obj :
        return_str = search_str[search_obj.start(): search_obj.end()]
    else:
        return_str = 'NA'
    return return_str

df['matched_str'] = df['Name'].apply(lambda x: pattern_searcher(search_str=x, search_list=pattern))

电流输出:

Name                                 matched_str
KK FUJI PARLIGHT                     FUJI           
NORTHWINDS ABATEMENT LLC             NORTHWINDS ABATEMENT
SAFEAIR TERM LTD CONTRACTORS         LTD CONTRACTORS
MEDICO SYSTEMS FUJI                  FUJI
TOKAI                                NA
FUJI CONTRACTOR                      FUJI

期望的输出:

Name                             matched_str
KK FUJI PARLIGHT                 FUJI
NORTHWINDS ABATEMENT LLC         NORTHWINDS ABATEMENT
SAFEAIR TERM LTD CONTRACTORS     NA
MEDICO SYSTEMS FUJI              NA
TOKAI                            NA
FUJI CONTRACTOR                  FUJI

标签: pythonstring

解决方案


def trim_replace(sequence, target, replacement, n=2):
    return [val if val != target else replacement for val in sequence.split()[:n]]


target_value = "TOP"
sequence = "BEA TOP LIST"
result = replace_in_first(sequence, target_value, "REPLACED")

print(result) 

输出:

['BEA', 'REPLACED']

推荐阅读