首页 > 解决方案 > 无法通过字符修改正确解析字符串

问题描述

我遇到了一个问题,我的 Python 代码没有正确返回一个函数调用,该函数调用旨在在每个大写字母之前添加一个下划线字符,我不确定我哪里出错了。对于输出,只有字符串中的“courseID”字被触及,而其他两个字没有。

我认为循环遍历单词中的字母,寻找大写字母会起作用,但似乎并非如此。有人可以让我知道我的代码哪里出错了吗?

def parse_variables(string):
    new_string=''
    for letter in string:
        if letter.isupper():
            pos=string.index(letter)
            parsed_string=string[:pos] + '_' + string[pos:]
            new_string=''.join(parsed_string+letter)
        else:
            new_string=''.join(letter)
#        new_string=''.join(letter)
    return new_string.lower()

parse_variables("courseID pathID apiID")

当前输出为单个小写字母d,预期输出应为course_id path_id api_id.

标签: pythonpython-3.xstring

解决方案


我认为这里的正则表达式解决方案更容易理解。这需要以大写字母结尾的单词并添加下划线并将它们变为小写

import re

s = "courseID pathID apiID exampleABC DEF"

def underscore_lower(match):
    return "_" + match.group(1).lower()

pat = re.compile(r'(?<=[^A-Z\s])([A-Z]+)\b')

print(pat.sub(underscore_lower, s))
# course_id path_id api_id example_abc DEF

您可能必须使用该正则表达式才能使其完全按照您的意愿行事。目前,它在单词的末尾使用大写字母,前面有一个既不是大写字母也不是空格的字符。然后它将这些字母变为小写,并在它们前面添加一个下划线。


推荐阅读