12

stripPython のビルトイン (およびその子であるrstripand lstrip) は、引数として与えられた文字列を、順序付けられた文字列としてではなく、一種の「リザーバー」として処理することに最近気付きました。

>>> s = 'abcfooabc'
>>> s.strip('abc')
'foo'
>>> s.strip('cba')
'foo'
>>> s.strip('acb')
'foo'

等々。

上記の例で出力が異なるように、特定の文字列から順序付けられた部分文字列を削除する方法はありますか?

4

5 に答える 5

10

私が最初に始めたとき、私はこの同じ問題を抱えていました。

代わりにstr.replaceを試してみませんか?

>>> s = 'abcfooabc'
>>> s.replace("abc", "")
0: 'foo'
>>> s.replace("cba", "")
1: 'abcfooabc'
>>> s.replace("acb", "")
2: 'abcfooabc'
于 2013-04-08T01:58:51.307 に答える
6

組み込みの方法はわかりませんが、非常に簡単です。

def strip_string(string, to_strip):
    if to_strip:
        while string.startswith(to_strip):
            string = string[len(to_strip):]
        while string.endswith(to_strip):
            string = string[:-len(to_strip)]
    return string
于 2013-04-08T01:52:57.193 に答える
2

re.subまだ言及されていないことに驚いています:

>>> re.sub("^abc", "", "abcfooabc") # ^ regex operator matches the beginning of a string
'fooabc'
>>> re.sub("^abc|abc$", "", "abcfooabc") # | string begins with abc or (|) ends with abc
'foo'
>>> re.sub("abc$", "", "abcfooabc") # | string begins with abc or (|) ends with abc
'abcfoo'
于 2019-11-29T14:31:13.060 に答える
0

これはどうですか: s.split('abc').

戻り値: ['', 'foo', ''].

したがって、次のように変更できます。

[i for i in s.split('abc') if i != '']. のみが必要'foo'で、 が必要ない場合は['foo']、次のように実行できます[i for i in s.split('abc') if i != ''][0]

すべて一緒に:

def splitString(s, delimiter):
    return [i for i in s.split(delimiter) if i != ''][0]
于 2013-04-08T01:58:31.350 に答える