簡體   English   中英

替換字符串中的特殊字符

[英]Replacing special characters in a string

我正在嘗試對python函數進行單元測試,但似乎無法替換該函數內部的任何字符。 即使該功能應該工作?

錯誤信息:

E       AssertionError: assert 'TE/ST-' == 'AEOEAA_TE_ST_'
E         - æøå TE/ST-
E         + AEOEAA_TE_ST_

功能

class Formatter(object):

    @classmethod
    def string(self, string):

        new_string = string.upper()


        # split cases
        new_string.replace(' ', '_')
        new_string.replace('-', '_')
        new_string.replace('/', '_')

        # chars
        new_string.replace('Ø', 'OE')
        new_string.replace('Å', 'AA')
        new_string.replace('Æ', 'AE')

        return new_string

測試

def test_formatter():
    test = Formatter.string('æøå te/st-')
    assert test.decode('utf-8') == 'AEOEAA_TE_ST_'

str.replace不是就地函數,這意味着在您調用它時,它返回一個必須分配回原始變量的值,否則將看不到更改。 例如,請考慮:

In [315]: string = 'æøå te/st-'.upper()

現在,致電.replace

In [316]: string.replace('Ø', 'OE')
Out[316]: 'ÆOEÅ TE/ST-'

In [317]: string
Out[317]: 'ÆØÅ TE/ST-'

沒變。 立即嘗試將其分配回來:

In [318]: string = string.replace('Ø', 'OE')

In [319]: string
Out[319]: 'ÆOEÅ TE/ST-'

作為更快的替代方法,請考慮使用str.translate 如果您使用的是python3,則可以傳遞替換的字典映射(您不能在python2上執行此操作)。

class Formatter(object):    
    @classmethod
    def string(self, strn):
        tab = dict.fromkeys(' -/', '_')
        tab.update({'Ø' : 'OE', 'Å' : 'AA', 'Æ' : 'AE'})

        return strn.upper().translate(str.maketrans(tab))

對於python2,您可以選擇堅持使用str.replace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM