我遇到了一个问题陈述,我必须将句子中的第一个字符大写,然后是随后的字符。我想出了一个使用正则表达式的解决方案,但我不得不使用两个正则表达式来完成工作。
有没有办法将这两个正则表达式组合成一个?
import re
def capitalize(string):
l2 = re.findall(r'([^\d][a-zA-Z]+\w*)', string) # reg exp1
l4 = re.findall(r'(^[a-zA-Z]+\w*)', string) # reg exp2
# Is there a way of combining these?
if l4 not in l2:
l2.extend(l4)
l3 = {e: e.title() for e in l2}
newstring = string
for item in l3:
newstring = newstring.replace(item, l3[item])
return newstring
validatorvalue = 'q w e r G H J K M' # => o/p 'Q W E R G H J K M'
# validatorvalue = 'hello world lol' => o/p 'Hello World Lol'
# validatorvalue = "1 w 2 r 3g" => "1 W 2 R 3g"
print(capitalize(validatorvalue))
我必须坚持这两个正则表达式,因为这是上述2个测试用例通过标准的唯一方法。
答案 0 :(得分:6)
您可以在不使用regex
的情况下获得相同的结果。 Python有string.capwords()
也是如此。例如:
>>> import string
>>> string.capwords('q w e r G H J K M')
'Q W E R G H J K M'
>>> string.capwords('Hello world lol')
'Hello World Lol'
>>> string.capwords('1 w 2 r 3g')
'1 W 2 R 3g'
作为替代方案,您可以编写自定义函数,首先根据空格分割字符串以获取单词列表,然后使用str.capitalize()
对每个单词进行大写,最后联接回列表以获取所需的字符串。这是一个示例:
def convert_string(my_str):
return ' '.join(s.capitalize() for s in my_str.split())
示例运行:
>>> convert_string('Q w e r g h j k m')
'Q W E R G H J K M'
>>> convert_string('Hello world lol')
'Hello World Lol'
>>> convert_string('1 w 2 r 3g')
'1 W 2 R 3g'
答案 1 :(得分:3)
要将句子中的所有字词大写,您可以使用re.sub
和re.findall
:
import re
def capitalize_string(s):
return re.sub('(?<=^)[a-z]|(?<=\s)[a-z]', '{}', s).format(*map(str.upper, re.findall('(?<=^)[a-z]|(?<=\s)[a-z]', s)))
strings = ['q w e r G H J K M', 'hello world lol', "1 w 2 r 3g"]
result = list(map(capitalize_string, strings))
输出:
['Q W E R G H J K M', 'Hello World Lol', '1 W 2 R 3g']
答案 2 :(得分:1)
如果您想要将空格分隔的“单词”大写,可以使用Moinuddin's non-regex solution。
如果有拼写标点符号的单词,并且还需要大写,则可以使用
re.sub(r'\b[a-z]', lambda x: x.group().upper(), validatorvalue)
请参阅Python online demo。 \b
与单词边界匹配,[a-z]
与小写ASCII字母匹配。
或者,将其扩展为所有Unicode字母,
re.sub(r'\b[^\W\d_]', lambda x: x.group().upper(), validatorvalue)
在Python 2中,您需要传递re.U
修饰符以使\W
和\d
速记字符类具有Unicode感知能力。
答案 3 :(得分:1)
title
方法可以做到这一点。
>>> my_string='hello world i need some capital letters'
>>> my_string.title()
'Hello World I Need Some Capital Letters'