用连字符将大写转换为小写

时间:2018-04-18 14:02:12

标签: python string list

我正在使用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

任何建议都会有所帮助!

2 个答案:

答案 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