回答:
最大で一度にセパレーターを分割し、最初のピースを取得します。
sep = '...'
rest = text.split(sep, 1)[0]
セパレータが存在しない場合はどうなるかについては言いませんでした。この場合も、Alexのソリューションも、文字列全体を返します。
セパレータは「...」であると想定しますが、任意の文字列を使用できます。
text = 'some string... this part will be removed.'
head, sep, tail = text.partition('...')
>>> print head
some string
セパレータが見つからない場合head
は、元の文字列がすべて含まれます。
パーティション関数はPython 2.5で追加されました。
パーティション(...)S.パーティション(9月)->(ヘッド、9月、テール)
Searches for the separator sep in S, and returns the part before it, the separator itself, and the part after it. If the separator is not found, returns S and two empty strings.
文字列内で最後にセパレーターが出現した後のすべてを削除したい場合、これがうまくいくことがわかります。
<separator>.join(string_to_split.split(<separator>)[:-1])
たとえば、のstring_to_split
ようなroot/location/child/too_far.exe
パスで、フォルダパスのみが必要な場合 は、分割し"/".join(string_to_split.split("/")[:-1])
て次のようになります。
root/location/child
REがない場合(これはあなたが望んでいるものだと思います):
def remafterellipsis(text):
where_ellipsis = text.find('...')
if where_ellipsis == -1:
return text
return text[:where_ellipsis + 3]
または、RE:
import re
def remwithre(text, there=re.compile(re.escape('...')+'.*')):
return there.sub('', text)
メソッドfindは、文字列内の文字位置を返します。次に、キャラクターからすべてのものを削除する場合は、次のようにします。
mystring = "123⋯567"
mystring[ 0 : mystring.index("⋯")]
>> '123'
文字を残しておきたい場合は、文字位置に1を加えます。
import re
test = "This is a test...we should not be able to see this"
res = re.sub(r'\.\.\..*',"",test)
print(res)
出力:「これはテストです」
ファイルから:
import re
sep = '...'
with open("requirements.txt") as file_in:
lines = []
for line in file_in:
res = line.split(sep, 1)[0]
print(res)