我有一个字符串,我想一次性消除多个短语。
如果该短语分别以“ 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 g
(aPPle t returns between paragraphsf
中没有空格)
f
(pEAr !!@#!@#!@WDWDdaseio f
与aPPle
一起,而pEAr与f
一起)
答案 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|$)
来捕获这种情况。