Python 3.6:如何实现字符串中指定单词的互换功能
改造字符串单词互换函数(忽略大小写)
原字符交换函数
原来的函数用于交换字符串中指定索引的字符:
def swapping(a, b, c): x = list(a) x[b], x[c] = x[c], x[b] return ''.join(x)
需求说明
需要将该函数改造为忽略大小写的指定单词互换功能:
- 互换字符串中所有匹配
word1和word2的单词(忽略大小写) - 替换后的单词统一使用大写形式(如示例所示)
- 保留原字符串中的标点、空格等非单词内容
改造后的解决方案
我们可以使用正则表达式来精准匹配单词(兼顾单词边界和末尾标点),通过回调函数实现互换逻辑:
import re def swapping(text, word1, word2): # 处理单个匹配项的回调函数 def replace_match(match): current_word = match.group(0) # 统一转小写判断匹配关系,实现忽略大小写 if current_word.lower() == word1.lower(): return word2.upper() elif current_word.lower() == word2.lower(): return word1.upper() # 不匹配的单词直接返回原内容 return current_word # 正则规则:匹配完整单词,包含末尾可能的标点(如句号、逗号) word_pattern = re.compile(r'\b\w+[.,!?]*\b') return word_pattern.sub(replace_match, text)
调用示例
# 示例1 print(swapping("Boys and girls left the school.", "boys", "girls")) # 输出: "GIRLS and BOYS left the school." # 示例2 print(swapping("Boys and girls left the school.", "GIRLS", "bOYS")) # 输出: "GIRLS and BOYS left the school."
逻辑说明
- 精准匹配:正则
r'\b\w+[.,!?]*\b'会匹配完整的单词单元,包括单词末尾的标点符号,避免误匹配单词片段。 - 忽略大小写判断:通过
lower()统一转换为小写进行比较,不管输入的目标单词大小写如何,都能正确匹配原字符串中的对应单词。 - 互换替换:匹配
word1的单词替换为word2的大写形式,匹配word2的单词替换为word1的大写形式,其他内容保持原样。
内容的提问来源于stack exchange,提问作者DwightD
相关产品推荐
相关产品推荐

