使用单个。* python删除字符串中多个连续出现的。*

时间:2018-08-10 22:16:59

标签: python regex python-2.7

下面是我的代码,用于检查".*"的多个连续出现 在字符串中。如果".*"连续出现多个,则将其替换为单个".*"。前卫:

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.*

2 个答案:

答案 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.*'