要求:
编写一个程序将字符串从驼峰式写法转换为下划线写法。
- 定义函数
convert_to_snake_case()
,接收一个字符串作为参数。 - 在函数内部,将字符串转换为下划线写法,并返回它。
驼峰式:
骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名
下划线写法:
名称中的每一个逻辑断点都用一个下划线来标记,例如:print_employee。下划线命名法是随着C语言的出现流行起来的,在UNIX/LIUNX这样的环境,以及GNU代码中使用非常普遍。
示例输入
firstChallenge
示例输出
first_challenge
代码:
import re
def convert_to_snake_case(s):
snake_case = re.sub(r'(?<!^)(?=[A-Z])', '_', s).lower()
return snake_case
# 获取输入
input_string = input()
# 调用函数,打印输出
print(convert_to_snake_case(input_string))
疑难点:
该代码使用了正则表达式:
re.sub(r'(?<!^)(?=[A-Z])', '_', s)
- sub()具有替换作用;
- (?<!^):正则表达式
(?<!^)
是一个负向零宽断言,用于匹配不在字符串开头的位置; - (?=[A-Z]):正则表达式
(?=[A-Z])
是一个正向零宽断言,用于匹配紧随当前位置的大写字母;
请注意,使用 (?=[A-Z])
断言时,只是匹配当前位置之后的字符,并不包括该位置上的字符。这个断言通常用于查找特定位置后面的字。
关于 (?=[A-Z])用法举例:
import re
# 定义输入字符串
input_string = 'mHelloWorldD'
# 使用正则表达式进行匹配
pattern = re.compile('[a-z](?=[A-Z])')
matches = pattern.findall(input_string)
# 输出匹配结果
print(matches)
该代码是输出大写字母前的小写字母。
输出结果:
['m', 'o', 'd']
关于例子中re.compile()的用法参考下面链接文章