Python字符串解剖

时间:2016-03-16 12:38:46

标签: regex string python-3.5

问题在于:

  1. 用以下内容替换输入字符串:第一个和最后一个字符,用两者之间的不同字符数分隔。
  2. 输入字符串中的任何非字母字符都应出现在输出字符串中的原始相对位置。
  3. 这是我到目前为止的代码:

    http://subclipse.tigris.org/update_1.10.x
    

    对于第二部分,我已经考虑过使用正则表达式,但是我无法用正则表达式来解决它,因为它不是我用过的东西。

1 个答案:

答案 0 :(得分:1)

您可以使用

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)。

如果您需要处理2个字母的单词,例如Ts> Ts,您可以在第二组中使用*量词替换+