如何在re.sub()中将变量与正则表达式搜索一起使用?

时间:2019-01-29 22:56:07

标签: python python-2.7

我有一个字符串,我想一次性消除多个短语。

如果该短语分别以“ aPPle”或“ pEAr”开头,并以“ f”或“ g”(带有空格字符)结束,那么我想用一个空格替换它。在开始和结束之间可以有任何内容。

@Override
protected void configure(HttpSecurity http) throws Exception {

    UsernamePasswordAuthenticationFilter filter = new UsernamePasswordAuthenticationFilter();
    filter.setAuthenticationManager(http.getSharedObject(AuthenticationManager.class));

    //here you can setup success handlers etc

    http
        .csrf().disable()
        .addFilter(myAuthFilter);
    ...
}

我坚持让re.sub使用变量,但得到segment_start = ['aPPle', 'pEAr'] segment_end = [' f ', ' g '] j=0 while (j+1) <= len(segment_start): clean = re.sub(r''+segment_start[j].*segment_end[j],'',clean) j += 1 。这可能真的很简单,我一直找不到关于SE的答案。

这是我要删除的短语

SyntaxError: invalid syntax

aPPle increased in other categories such as f

这是我会保留的短语

pEAr !!@#!@#!@WDWDdaseio gaPPle t returns between paragraphsf中没有空格)

fpEAr !!@#!@#!@WDWDdaseio faPPle一起,而pEAr与f一起)

1 个答案:

答案 0 :(得分:0)

使用str.format()将值注入到您的模式中,即:

segment_start = ['aPPle', 'pEAr']
segment_end = [' f ', ' g ']

for i, start in enumerate(segment_start):
    clean = re.sub('{}.*{}'.format(start, segment_end[i]), ' ', clean)

您可以改为使用简单的start + '.*' + segment_end[i],但是如果您要使用复杂的模式,则很难处理这种手动连接。

请记住,结束模式必须完全匹配才能正常工作-例如,如果字符串以g结尾(末尾没有空格),则pEAr的模式将不会工作。您可以将segment_end定义为g(\s|$)来捕获这种情况。