考点:
- 字符串切片
- 字符串方法(如:
split
,join
,replace
) - 正则表达式(
re
模块)
题目描述: 编写一个Python函数 process_text
,该函数接受一个字符串作为输入,并执行以下操作:
- 使用正则表达式将字符串中的所有数字替换为相应数量的星号(
*
)。 - 将处理后的字符串分割成单词列表。
- 将单词列表中的每个单词首字母大写,其余字母小写。
- 使用逗号和空格(
,
)将单词列表连接成一个字符串,并返回。
例如,输入字符串 "Hello 123 world 456"
应返回 "Hello***, World***"
。
作答区:
# 请在此处编写你的代码
答案
import re
def process_text(text):
# 替换数字为星号
text_with_stars = re.sub(r'\d+', lambda m: '*' * len(m.group()), text)
# 分割字符串为单词列表
words = text_with_stars.split()
# 首字母大写,其余小写
capitalized_words = [word.capitalize() for word in words]
# 连接单词列表为一个字符串
result = ', '.join(capitalized_words)
return result
# 测试代码
test_string = "Hello 123 world 456"
print(process_text(test_string)) # 输出应为 "Hello***, World***"
更高级的实现
扩展考点:
- 正则表达式的分组和回调函数
- 字符串的格式化
高级实现描述: 利用正则表达式的 sub
函数的回调功能,直接在替换数字的同时对单词进行首字母大写和其余字母小写的处理。
作答区:
# 请在此处编写你的代码
答案:
import re
def process_text_advanced(text):
# 正则表达式匹配单词,并使用回调函数进行格式化
def format_word(match):
word = match.group()
return word[0].upper() + word[1:].lower()
# 替换数字为相应数量的星号,并格式化单词
formatted_text = re.sub(r'\b\w+\b', format_word, text)
# 替换数字为星号
formatted_text = re.sub(r'\d+', lambda m: '*' * len(m.group()), formatted_text)
return formatted_text
# 测试代码
test_string = "Hello 123 world 456"
print(process_text_advanced(test_string)) # 输出应为 "Hello***, World***"
www.zymlrcw.com
www.zylzrcw.com
www.zygtrcw.com
在这个实现中,我们使用了 \b\w+\b
正则表达式来匹配单词,并使用 format_word
回调函数来格式化每个匹配的单词。之后,我们再次使用 sub
函数来替换数字。这种方法更为高效,因为它只需要遍历字符串两次,而不是先分割再单独处理每个单词。