从单词的开头和结尾都删除给定的字符串

时间:2019-06-12 09:02:49

标签: regex python-3.x

数据:

col 1
AL GHAITHA
AL ASEEL
EMARAT AL
LOREAL
ISLAND CORAL

我的代码:

def remove_words(df, col, letters):
    regular_expression = '^' + '|'.join(letters)
    df[col] = df[col].apply(lambda x:   re.sub(regular_expression, "", x))

所需的输出:

col 1
GHAITHA
ASEEL
EMARAT
LOREAL
ISLAND CORAL
SUNRISE

函数调用:

letters = ['AL','SUPERMARKET']
remove_words(df=df col='col 1',letters=remove_letters)

基本上,我想删除开头或结尾提供的字母。 (注意:它应该是单独的字符串) 雾,例如:“ EMARAT AL”应变为“ EMARAT” 请注意,“ LOREAL”不应成为“ LORE”

构建df的代码:

raw_data = {'col1': ['AL GHAITHA', 'AL ASEEL', 'EMARAT AL', 'LOREAL UAE',
                     'ISLAND CORAL','SUNRISE SUPERMARKET']
}

df = pd.DataFrame(raw_data)

1 个答案:

答案 0 :(得分:0)

您可以使用

pattern = r'^{0}\b|\b{0}$'.format("|".join(map(re.escape, letters)))
df['col 1'] = df['col 1'].str.replace(pattern, r'\1').str.strip()

(?s)^{0}\b|(.*)\b{0}$'.format("|".join(map(re.escape, letters))模式将创建类似(?s)^word\b|(.*)\bword$的模式,并且它将在整个字符串的开头和结尾与word匹配。

在检查字符串末尾的单词时,之前的整个文本将被捕获到第1组中,因此替换模式包含\1占位符以将文本恢复为结果字符串。

如果您的letters列表中仅包含由字符组成的项目,则可以将map省略为re.escape,将map(re.escape, letters)替换为letters

.str.strip()将删除所有导致的前导/尾随空格。

请参见regex demo