我有一个字符串,我想在其中计算#
的出现次数,以便用数字替换它们来创建一个增量。
例如:
rawString = 'MyString1_test##_edit####'
for x in xrange(5):
output = doConvertMyString(rawString)
print output
MyString1_test01_edit0001
MyString1_test02_edit0002
MyString1_test03_edit0003
MyString1_test04_edit0004
MyString1_test05_edit0005
假设#
的数量不固定且rawString
是仅包含string.ascii_letters + string.digits + '_' + '#
的用户输入,我该怎么做?
到目前为止,这是我的测试:
rawString = 'MyString1_test##_edit####'
incrDatas = {}
key = '#'
counter = 1
for x in xrange(len(rawString)):
if rawString[x] != key:
counter = 1
continue
else:
if x > 0:
if rawString[x - 1] == key:
counter += 1
else:
pass
# ???
答案 0 :(得分:2)
您可以在zfill
替换中使用re.sub
来填充任意数量的#
块。 #+
正则表达式模式匹配1个或多个#
符号。 m.group()
代表正则表达式找到的匹配项,因此,我们将所有#
替换为递增的x
转换为字符串,并填充相同数量的0
s比赛中有#
。
import re
rawString = 'MyString1_test##_edit####'
for x in xrange(5):
output = re.sub(r"#+", lambda m: str(x+1).zfill(len(m.group())), rawString)
print output
the demo的结果:
MyString1_test01_edit0001
MyString1_test02_edit0002
MyString1_test03_edit0003
MyString1_test04_edit0004
MyString1_test05_edit0005
答案 1 :(得分:1)
下面的代码将<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>src/main/java/mockprocesses/itclient-counter/bin/main/TestCounter.java</include>
</includes>
</configuration>
</plugin>
转换为格式字符串,在列表解析中使用rawString
来查找哈希值组。每次运行的哈希都会转换为格式指令,以打印适当宽度的零填充整数,非哈希运行只需将它们连接在一起。
此代码适用于Python 2.6及更高版本。
groupby
<强>输出强>
from itertools import groupby
def convert(template):
return ''.join(['{{x:0{0}d}}'.format(len(list(g))) if k else ''.join(g)
for k, g in groupby(template, lambda c: c == '#')])
rawString = 'MyString1_test##_edit####'
fmt = convert(rawString)
print(repr(fmt))
for x in range(5):
print(fmt.format(x=x))
答案 2 :(得分:0)
这个怎么样 -
rawString = 'MyString1_test##_edit####'
splitString = rawString.split('_')
for i in xrange(10): # you may put any count
print '%s_%s%02d_%s%04d' % (splitString[0], splitString[1][0:4], i, splitString[2][0:4], i, )
答案 3 :(得分:0)
您可以尝试这种天真(可能不是最有效)的解决方案。它假定'#'
的数量是固定的。
rawString = 'MyString1_test##_edit####'
for i in range(1, 6):
temp = rawString.replace('####', str(i).zfill(4)).replace('##', str(i).zfill(2))
print(temp)
>> MyString1_test01_edit0001
MyString1_test02_edit0002
MyString1_test03_edit0003
MyString1_test04_edit0004
MyString1_test05_edit0005
答案 4 :(得分:-2)
test_string = 'MyString1_test##_edit####'
def count_hash(raw_string):
str_list = list(raw_string)
hash_count = str_list.count("#") + 1
for num in xrange(1, hash_count):
new_string = raw_string.replace("####", "000" + str(num))
new_string = new_string.replace("##", "0" + str(num))
print new_string
count_hash(test_string)
它有点笨重,只适用于少于10的#计数,但似乎做你想要的。 编辑:“只有工作”我的意思是你会得到额外的字符与固定数量的#符号插入
EDIT2:修改后的代码