我正在对字符串进行按摩,因此需要将字符串的第一个字母和破折号或斜线后面的首字母大写。
所以下面的字符串:
test / string-这是一个测试字符串
应该看起来像这样:
测试/字符串-这是一个测试字符串
因此,在尝试解决此问题时,我的第一个想法似乎是个坏主意-迭代字符串并检查每个字符并使用索引等。确定字符是否在破折号或斜杠后面,如果确实将其设置为上写到我的新字符串。
def correct_sentence_case(test_phrase):
corrected_test_phrase = ''
firstLetter = True
for char in test_phrase:
if firstLetter:
corrected_test_phrase += char.upper()
firstLetter = False
#elif char == '/':
else:
corrected_test_phrase += char
这似乎非常不符合Python。用什么Python方式可以解决这个问题?
以下内容非常棒,但我不能同时使用斜线和斜线:
corrected_test_phrase = ' - '.join(i.capitalize() for i in test_phrase.split(' - '))
我从中得到的是这样的:
Convert UPPERCASE string to sentence case in Python
任何帮助将不胜感激:)
答案 0 :(得分:4)
我能够使用正则表达式完成所需的转换:
import re
capitalized = re.sub(
'(^|[-/])\s*([A-Za-z])', lambda match: match[0].upper(), phrase)
表达式说:“在匹配字符串^
的开头,破折号或斜杠后加上空格和单词字符的任何位置,请用大写字母替换单词字符。”
答案 1 :(得分:2)
如果您不想使用混乱的拆分连接逻辑,请使用正则表达式:
import re
string = 'test/string - this is a test string'
print(re.sub(r'(^([a-z])|(?<=[-/])\s?([a-z]))',
lambda match: match.group(1).upper(), string))
# Test/String - This is a test string
答案 2 :(得分:2)
使用双分割
import re
' - '.join([i.strip().capitalize() for i in re.split(' - ','/'.join([i.capitalize() for i in re.split('/',test_phrase)]))])