Python 字符串剖析

Python String Dissection

这是问题所在:

  1. 将输入字符串替换为以下内容:第一个和最后一个字符,由两个字符之间的不同字符数分隔。
  2. 输入字符串中的任何非字母字符都应出现在输出字符串中的原始相对位置。

这是我目前的代码:

word = input("Please enter a word: ")
first_character = word[0]
last_character = word[-1]
unique_characters = (list(set(word[1:-1])))
unique_count = str(len(unique_characters))
print(first_character[0],unique_count,last_character[0])

对于第二部分,我考虑过使用正则表达式,但是我一直无法理解正则表达式,因为我从未使用过它。

您可以使用

import re
pat = r"\b([^\W\d_])([^\W\d_]*)([^\W\d_])\b"
s = "Testers"
print(re.sub(pat, (lambda m: "{0}{1}{2}".format(m.group(1), len(''.join(set(m.group(2)))), m.group(3))), s))

参见IDEONE demo

正则表达式细分:

  • \b - 单词边界(如果测试单个字符串,请使用 ^
  • ([^\W\d_]) - 第 1 组捕获任何 ASCII 字母(如果您也需要匹配 Unicode,请使用 re.U 标志)
  • ([^\W\d_]*) - 第 2 组捕获零个或多个字母
  • ([^\W\d_]) - 第 3 组在...
  • 捕获一封信
  • \b - 尾部单词边界(如果处理单个字符串,请替换为 $

在替换模式中,len(''.join(set(m.group(2)))) 正在计算唯一字母出现的次数 (see this SO post)。

如果您需要处理双字母单词,例如 Ts > Ts,您可以在第二组中将 * 替换为 + 量词。