如何在python中使用for-loop而不使用正则表达式来更改字符串

时间:2016-09-07 06:36:59

标签: python lambda

如何在没有正则表达式的情况下使用for-loop更改字符串。

示例:(python 2.7.1)

import re
trans = lambda src: re.sub("([A-Z])", lambda m:"_"+m.group().lower(), src, flags=0)
print(trans("helloWorld"))

我希望结果为:

hello_world

我想从正则表达式版本更改为for-loop版本。

条件

  • 结果将是相同的
  • 只有一行!
  • 使用for循环

2 个答案:

答案 0 :(得分:1)

def change(string):
    for letter in string:
        if letter.isupper():
            yield '_{}'.format(letter.lower())
        else:
            yield letter

print ''.join(change("helloWorld"))

如果你想把它放在一行:

print ''.join(letter.isupper() and '_{}'.format(letter.lower()) or letter for letter in 'helloWorld')

答案 1 :(得分:0)

您可以使用list comprehension(即一个循环播放)来实现它:

>>> my_string = "helloWorld"
>>> ''.join(['_{}'.format(s.lower()) if s.isupper() else s for s in my_string])
'hello_world'

<强>解释

列表只是一个字符列表。迭代每个char并使用isupper() fuct检查它是否为大写字符。如果是,请使用_<lower-case> func。

将其替换为lower()

上面列表理解的结果是:['h', 'e', 'l', 'l', 'o', '_w', 'o', 'r', 'l', 'd']。加入列表以查找您的字符串,即hello_world