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

zub*_*g55 4 python regex python-2.7

下面是我检查".*" 字符串中多次连续出现的代码 。如果有多个连续出现,".*"则将其替换为 single ".*"。锻造:

import re

dot_star_check = re.compile('(\.\*){2,}')

k = ".*.*.*.*.*foo.*"

k = k.replace(?,".*") if dot_star_check.search(k) else k

print k
Run Code Online (Sandbox Code Playgroud)

我应该写什么而不是?.*用单个替换多个连续出现的.*

所以,预期输出是 .*foo.*

其他例子:

1.) foo.*.*.*.*bar.* ->foo.*bar.*

2.) .*foobar.*.*.*.*.* ->.*foobar.*

Unb*_*ess 5

您可以使用re.sub(?:\.\*)+作为您的模式:

import re
dot_star_check = re.compile('(?:\.\*)+')
k = ".*.*.*.*.*foo.*"
k = re.sub(dot_star_check,'.*',k)

print (k)
Run Code Online (Sandbox Code Playgroud)

印刷:

.*foo.*
Run Code Online (Sandbox Code Playgroud)

您还可以提高模式的效率,以便仅在出现 2 次或多次使用时才执行替换(?:\.\*){2,}

import re
dot_star_check = re.compile('(?:\.\*){2,}')
k = ".*.*.*.*.*foo.*"
k = re.sub(dot_star_check,'.*',k)

print (k)
Run Code Online (Sandbox Code Playgroud)

印刷:

.*foo.*
Run Code Online (Sandbox Code Playgroud)