如何在 python 中将字符串转换为 snakecase 格式
How to convert string to snakecase format in python
我创建了一个可以将每个字符串转换为 snakecase
的函数,但我的一些字符串造成了问题。我使用了 re
模块
完整代码
import re
def toSnakeCase(string, restToLower : bool = False):
string = re.sub(r'(?:(?<=[a-z])(?=[A-Z]))|[^a-zA-Z]', ' ', self.string).replace(' ', '_')
if (restToLower == True):
return ''.join(self.string.lower())
else:
return ''.join(self.string)
输入
strings = ['hello world', 'HelloWorld', '-HELLO-WORLD-', 'Hello-World', 'hello_world', '--hello.world', 'Hello-WORLD', 'helloWORLD']
# using enumerate just to see which list item creating problem
for i, j in enumerate(strings, 1):
print(f'{i}. {toSnakeCaseV1(j)}')
输出 - 没有restToLower = True
1. hello_world
2. Hello_World
3. _HELLO_WORLD_
4. Hello_World
5. hello_world
6. __hello_world
7. Hello_WORLD
8. hello_WORLD
和restToLower = True
1. hello_world
2. hello_world
3. _hello_world_
4. hello_world
5. hello_world
6. __hello_world
7. hello_world
8. hello_world
如您所见,项目 3 和 6 造成了问题。根据我的说法,有人知道为什么要这样做,我的正则表达式是正确的。
预期输出
1. hello_world
2. hello_world
3. hello_world
4. hello_world
5. hello_world
6. hello_world
7. hello_world
8. hello_world
您的问题似乎只是前导和尾随 _
,在 space > _
转换
之前或之后删除它们
def toSnakeCase(string):
string = re.sub(r'(?<=[a-z])(?=[A-Z])|[^a-zA-Z]', ' ', string).strip().replace(' ', '_')
return ''.join(string.lower())
对于post-条带化
string = re.sub(r'(?<=[a-z])(?=[A-Z])|[^a-zA-Z]', ' ', string).replace(' ', '_').strip("_")
你能试试吗:
def toSnakeCase(string):
return re.sub(r'(?<=[a-z])(?=[A-Z])|[^a-zA-Z]', '_', j).strip('_').lower()
for i, j in enumerate(strings, 1):
print(f'{i}. {toSnakeCase(j)}')
输出:
1. hello_world
2. hello_world
3. hello_world
4. hello_world
5. hello_world
6. hello_world
7. hello_world
8. hello_world
我创建了一个可以将每个字符串转换为 snakecase
的函数,但我的一些字符串造成了问题。我使用了 re
模块
完整代码
import re
def toSnakeCase(string, restToLower : bool = False):
string = re.sub(r'(?:(?<=[a-z])(?=[A-Z]))|[^a-zA-Z]', ' ', self.string).replace(' ', '_')
if (restToLower == True):
return ''.join(self.string.lower())
else:
return ''.join(self.string)
输入
strings = ['hello world', 'HelloWorld', '-HELLO-WORLD-', 'Hello-World', 'hello_world', '--hello.world', 'Hello-WORLD', 'helloWORLD']
# using enumerate just to see which list item creating problem
for i, j in enumerate(strings, 1):
print(f'{i}. {toSnakeCaseV1(j)}')
输出 - 没有restToLower = True
1. hello_world
2. Hello_World
3. _HELLO_WORLD_
4. Hello_World
5. hello_world
6. __hello_world
7. Hello_WORLD
8. hello_WORLD
和restToLower = True
1. hello_world
2. hello_world
3. _hello_world_
4. hello_world
5. hello_world
6. __hello_world
7. hello_world
8. hello_world
如您所见,项目 3 和 6 造成了问题。根据我的说法,有人知道为什么要这样做,我的正则表达式是正确的。
预期输出
1. hello_world
2. hello_world
3. hello_world
4. hello_world
5. hello_world
6. hello_world
7. hello_world
8. hello_world
您的问题似乎只是前导和尾随 _
,在 space > _
转换
def toSnakeCase(string):
string = re.sub(r'(?<=[a-z])(?=[A-Z])|[^a-zA-Z]', ' ', string).strip().replace(' ', '_')
return ''.join(string.lower())
对于post-条带化
string = re.sub(r'(?<=[a-z])(?=[A-Z])|[^a-zA-Z]', ' ', string).replace(' ', '_').strip("_")
你能试试吗:
def toSnakeCase(string):
return re.sub(r'(?<=[a-z])(?=[A-Z])|[^a-zA-Z]', '_', j).strip('_').lower()
for i, j in enumerate(strings, 1):
print(f'{i}. {toSnakeCase(j)}')
输出:
1. hello_world
2. hello_world
3. hello_world
4. hello_world
5. hello_world
6. hello_world
7. hello_world
8. hello_world