根据特定子字符串的数量和顺序从另一个字符串返回一个字符串

时间:2017-08-25 05:16:07

标签: python string

假设我有一个字符串,例如

s =“左 - 右 - 右 - 左”

和空字符串n =''

并从左到右查看该字符串,阅读出现的左侧和权限数量,并为每个左侧添加“a”,为每个出现的右侧添加“b”。

换句话说就像

这样的函数
AddAuthentication

将返回'aabba'

我正在思考s.count,但是b需要在a之间,而count并不会告诉你子串发生的位置。

4 个答案:

答案 0 :(得分:2)

最简单的方法是用a替换左边,用b替换右边。它应该工作

s = "left-left-right-right-left"
s = s.replace("left","a")
s=s.replace("right","b")
s=s.replace("-","")

答案 1 :(得分:0)

最简单的解决方案。

def convert(s):
    s = s.replace("left", "a")
    s = s.replace("right", "b")
    s = s.replace("-", "")
    return s

OR

def convert(s):
    return s.replace("left", "a").replace("right", "b").replace("-", "")

答案 2 :(得分:0)

我尝试过递归解决方案。

def rec_search(s, n):
    if len(s) is 0:
        return n

    if s[-len('left'):] == 'left':
        return rec_search(s[:-len('-left')], n) + 'a'

    return rec_search(s[:-len('-right')], n) + 'b'



print rec_search('left-left-right-right-left', '')

答案 3 :(得分:0)

这也可以使用正则表达式sub()完成,如下所示:

import re

s = "left-left-right-right-left"
print re.sub('left|right|-', lambda x: {'left':'a', 'right':'b', '-':''}[x.group(0)], s)

给你:

aabba

它的工作原理是将任何left right|替换为在字典中查找替换文字的函数。