短い答え、:、
string
があなたの元の文字列である
string.split(pattern, 1)[0]
pattern
はあなたの「休憩」のパターンである、1
は1時間以下で分割しないように示し、 [0]
はsplitによって返された最初の要素を取ります。アクションで
:
>>> s = "a descriptor 23 fd"
>>> s.split("23", 1)[0]
'a descriptor '
>>> s.split("fdasfdsafdsa", 1)[0]
'a descriptor 23 fd'
これは私が以前、私はとにかくここに保つであろう書かれていたものを表現するのはるかに短い方法です。
そして、あなたは複数のパターンを削除する必要がある場合、これはreduce
組み込みのための偉大な候補である:
>>> string = "a descriptor dps foo 23 bar fd quux"
>>> patterns = ["dps", "23", "fd"]
>>> reduce(lambda s, pat: s.split(pat, 1)[0], patterns, string)
'a descriptor '
>>> reduce(lambda s, pat: s.split(pat, 1)[0], patterns, "uiopuiopuiopuipouiop")
'uiopuiopuiopuipouiop'
これは基本的に言う:patterns
の各pat
のために:上記の説明のように(string
を取り、繰り返しstring.split(pat, 1)[0]
を適用)、毎回以前に返された値の結果を操作します。ご覧のように、文字列内にパターンがない場合、元の文字列が返されます。
最も簡単な答えはstring.find
と組み合わせリスト/文字列のスライスです:
>>> s = "a descriptor 23 fd"
>>> s[:s.find("fd")]
'a descriptor 23 '
>>> s[:s.find("23")]
'a descriptor '
>>> s[:s.find("gggfdf")] # <-- look out! last character got cut off
'a descriptor 23 f'
より良いアプローチ(欠落しているパターンときs.find
リターン-1の最後の文字を遮断回避するため)可能性があります単純な関数でラップすること:
>>> def cutoff(string, pattern):
... idx = string.find(pattern)
... return string[:idx if idx != -1 else len(string)]
...
>>> cutoff(s, "23")
'a descriptor '
>>> cutoff(s, "asdfdsafdsa")
'a descriptor 23 fd'
[:s.find(x)]
構文は右Hまでのインデックス0から文字列の一部を取ることを意味結腸の側方および側部。この場合、RHSはs.find
の結果となり、渡された文字列のインデックスが返されます。例えば
def get_descriptor(text):
codes = ('12', 'dps', '23')
for c in codes:
try:
return text[:text.index(c)].rstrip()
except ValueError:
continue
raise ValueError("No descriptor found in `%s'" % (text))
:あなたはこのような何かを説明しているように見える
、コードは何であり、どのような出力は次のようになります。私はあなたが例外を期待して好きではない場合は、トライキャッチを削除することができ、迅速に実現? –