我正在使用Python处理一些CSS代码,因为它们来自JSON文件(JSON不接受连字符),它们有一个特定的符号eg.. font-size = fontSize
,我想转换每个大写字母并放入它们以正确的CSS格式返回,在大写字母之前插入连字符。
string = 'borderRadius: 0px, zIndex: 2, transform: translate(170px, 195px) skew(-30deg, 0deg), fontSize:30px'
def getIndices(string):
// get position of each capital letters.
index = [i for i, c in enumerate(string) if c.isupper()]
// code below would be inserted here.
// insert hyphen right before the upperscase
for i in index:
string = string[:i] + '-' + string[i:]
// once done, set string to lowercase since there are no uppercases in CSS properties
string = string.lower()
return string
getIndices(string)
问题是,每次连字符被插入时,大写字母的位置都会关闭,因此插入也会关闭。
我考虑过对索引进行限制并按列表编号增加列表中的每个int,但我可能做的事情不太正确。
...
index = [25, 35, 58]
for i, value in enumerate(index):
value = value + (i)
index[i] = value
任何建议都会有所帮助!
答案 0 :(得分:1)
如果我做对了,这是一种做法
for c in my_string:
print c
if c.isupper():
my_string = my_string.replace(c,"-%s" % c.lower())
print my_string # will print fontSize = font-size
答案 1 :(得分:1)
你可以简单地反向插入。否则,第一个将改变最后一个的偏移量。这可以通过在循环之前调用索引列表上的reversed
来完成。
def getIndices(string):
# get position of each capital letters.
index = [i for i, c in enumerate(string) if c.isupper()]
# code below would be inserted here.
# insert hyphen right before the upperscase
for i in reversed(index):
string = string[:i] + '-' + string[i:]
# once done, set string to lowercase since there are no uppercases in CSS properties
string = string.lower()
return string
但最好避免:
string = string[:i] + '-' + string[i:]
因为每次循环迭代都会产生四个新字符串。
通过构建列表然后调用'-'.join
。以下作品:
def getIndices(string):
# get position of each capital letters.
index = [i for i, c in enumerate(string) if c.isupper()]
# code below would be inserted here.
# insert hyphen right before the upperscase
l = []
e = len(string)
for i in reversed(index):
l.append(string[i:e])
e = i
l.append(string[:e])
l.reverse()
string = '-'.join(l)
# once done, set string to lowercase since there are no uppercases in CSS properties
string = string.lower()
return string
我想做:
l = []
e = len(string)
for i, c in reversed(enumerate(string)):
if c.isupper():
l.append(string[i:e])
e = i
l.append(string[:e])
l.reverse()
string = '-'.join(l)
[上面的代码不起作用,因为它导致TypeError: argument to reversed() must be a sequence
,但错误是误导参数必须是序列或已定义__reversed__
的对象
但是当他们添加reversed
时,他们没有考虑通过定义返回反向的__reversed__
来使其适用于所有内置迭代器函数,而是在迭代中迭代它们__reversed__
。我已经实现了一个enumerate
以这种方式工作并找到它Pythonic。奇怪的是,它适用于xrange
但不适用于enumerate
,因此代码变为:
def getIndices(string):
l = []
e = len(string)
for i in reversed(xrange(len(string))):
if string[i].isupper():
l.append(string[i:e])
e = i
l.append(string[:e])
l.reverse()
string = '-'.join(l)
string = string.lower()
return string