Python使用re模块和列表范围反转字符串

时间:2014-08-07 11:33:17

标签: python regex string

这是我的琐碎Python代码:

from re import match
str = "Hello"
print str[::-1]   # elloH
obj = match(r'(\w)(\w)(\w)(\w)(\w)', str)
for i in range(len(str)-1, -1, -1):  # or   reversed(range(len(str)))
    print obj.groups()[i],   # o l l e H

我在这段代码中有两个查询:

  1. 列表str[::-1]中范围选项背后的逻辑是什么?因为str[len(str):-1:-1]给出空输出,str[len(str):0:-1]给出输出``olle`等等。
  2. 如何使这个正则表达式r'(\w)(\w)(\w)(\w)(\w)'如此紧凑? (即)删除重复或递归冗余(\w),如r'(\w)+'

3 个答案:

答案 0 :(得分:1)

a)请检查以下代码:

>>> str = "Hello"
>>> str[:]
'Hello'
>>> str[::1]
'Hello'
>>> str[::2]
'Hlo'
>>> str[::3]
'Hl'
>>> str[::-1]
'olleH'
>>> str[::-2]
'olH'
>>> str[-1]
'o'
>>>

由此我们可以推断,[:: n]中的最后一个数字(n)表示从头开始跳转的步数。如果它是正数,它从位置0开始,如果它是负数,它从最后一个位置(-1)开始。

答案 1 :(得分:1)

        import re
        str = "Hello"
        print str[::-1]   # elloH
        obj = re.findall(r"(\w)", str)
        for i in range(len(str)-1, -1, -1):  # or   reversed(range(len(str)))
            print obj.groups()[i]

这就是你要找的东西。

答案 2 :(得分:0)

word = "Hello"
rword = " ".join(reversed(word))

'o l l e H'