如何在字符串中进行条件字符替换

2024-10-01 17:30:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中有一个unicode字符串,基本上需要逐个字符地检查并根据规则列表替换某些字符串。一个这样的规则是,如果an之后,a将被改为{}。另外,如果一行中有两个元音字符,它们将被一个元音字符和:替换。所以如果我有字符串"natarook",那么获得{}的最简单和最有效的方法是什么?如果重要的话,使用python2.6和cherrypy3.1。在

编辑:两个元音连成一行意味着相同的元音(oo,aa,ii)


Tags: 方法字符串编辑列表规则unicode字符ii
3条回答
# -*- coding: utf-8 -*-

def subpairs(s, prefix, suffix):
    def sub(i, sentinal=object()):
        r = prefix.get(s[i:i+2], sentinal)
        if r is not sentinal: return r

        r = suffix.get(s[i-1:i+1], sentinal)
        if r is not sentinal: return r
        return s[i]

    s = '\0'+s+'\0'
    return ''.join(sub(i) for i in xrange(1,len(s)))

vowels = [(v+v, u':') for v in 'aeiou']

prefix = {}
suffix = {'na':u'ö'}
suffix.update(vowels)
print subpairs('natarook', prefix, suffix)
# prints: nötaro:k

prefix = {'na':u'ö'}
suffix = dict(vowels)
print subpairs('natarook', prefix, suffix)
# prints: öataro:k

首先关注简单正确,然后考虑效率,如果分析表明这是一个瓶颈。在

简单的方法是:

prev = None
for ch in string:
  if ch == 'a':
    if prev == 'n':
      ...
  prev = ch

“我知道,我会用正则表达式!”在

但说真的,regex确实很适合字符串操作。在

您可以为每个规则编写一个,如下所示:

s/na/nö/g
s/([aeiou])$1/$1:/g

或者您可以在运行时从列出它们的其他源生成它们。在

相关问题 更多 >

    热门问题