给定特定规则,如何将字符串中的特定字母大写

时间:2018-12-27 20:17:08

标签: python string

我正在对字符串进行按摩,因此需要将字符串的第一个字母和破折号或斜线后面的首字母大写。

所以下面的字符串:

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

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:4)

我能够使用正则表达式完成所需的转换:

import re
capitalized = re.sub(
    '(^|[-/])\s*([A-Za-z])', lambda match: match[0].upper(), phrase)

表达式说:“在匹配字符串^的开头,破折号或斜杠后加上空格和单词字符的任何位置,请用大写字母替换单词字符。”

demo

答案 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)]))])