下面是我的代码,用于检查".*"
的多个连续出现
在字符串中。如果".*"
连续出现多个,则将其替换为单个".*"
。前卫:
import re
dot_star_check = re.compile('(\.\*){2,}')
k = ".*.*.*.*.*foo.*"
k = k.replace(?,".*") if dot_star_check.search(k) else k
print k
我应该写些什么而不是?将.*
的多个连续出现替换为单个.*
因此,预期输出为.*foo.*
其他示例:
1。)foo.*.*.*.*bar.* ->foo.*bar.*
2。).*foobar.*.*.*.*.* ->.*foobar.*
答案 0 :(得分:3)
您可以将re.sub
和(?:\.\*)+
用作模式:
import re
dot_star_check = re.compile('(?:\.\*)+')
k = ".*.*.*.*.*foo.*"
k = re.sub(dot_star_check,'.*',k)
print (k)
打印:
.*foo.*
您还可以提高模式的效率,以便仅在使用(?:\.\*){2,}
出现2个或更多的情况下才执行替换:
import re
dot_star_check = re.compile('(?:\.\*){2,}')
k = ".*.*.*.*.*foo.*"
k = re.sub(dot_star_check,'.*',k)
print (k)
打印:
.*foo.*
答案 1 :(得分:1)
我认为您可以只使用re.sub
和(\.\*)+
作为正则表达式:
s = 'foo.*.*.*.*bar.*'
s2 = '.*foobar.*.*.*.*.* '
k = ".*.*.*.*.*foo.*"
>>> re.sub('(\.\*)+','.*',s)
'foo.*bar.*'
>>> re.sub('(\.\*)+','.*',s2)
'.*foobar.* '
>>> re.sub('(\.\*)+','.*',k)
'.*foo.*'