Ich habe eine Schnur. Wie entferne ich den gesamten Text nach einem bestimmten Zeichen? ( In diesem Fall...
)
Der Text danach ...
ändert sich, deshalb möchte ich alle Zeichen nach einem bestimmten entfernen.
Ich habe eine Schnur. Wie entferne ich den gesamten Text nach einem bestimmten Zeichen? ( In diesem Fall...
)
Der Text danach ...
ändert sich, deshalb möchte ich alle Zeichen nach einem bestimmten entfernen.
Antworten:
Teilen Sie Ihren Separator höchstens einmal auf und nehmen Sie das erste Stück:
sep = '...'
rest = text.split(sep, 1)[0]
Sie haben nicht gesagt, was passieren soll, wenn das Trennzeichen nicht vorhanden ist. Sowohl diese als auch Alex 'Lösung geben in diesem Fall die gesamte Zeichenfolge zurück.
Angenommen, Ihr Trennzeichen ist '...', aber es kann eine beliebige Zeichenfolge sein.
text = 'some string... this part will be removed.'
head, sep, tail = text.partition('...')
>>> print head
some string
Wenn das Trennzeichen nicht gefunden head
wird, enthält es die gesamte ursprüngliche Zeichenfolge.
Die Partitionsfunktion wurde in Python 2.5 hinzugefügt.
Partition (...) S. Partition (sep) -> (Kopf, sep, Schwanz)
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.
Wenn Sie nach dem letzten Auftreten eines Trennzeichens in einer Zeichenfolge alles entfernen möchten, funktioniert dies gut:
<separator>.join(string_to_split.split(<separator>)[:-1])
Wenn es sich beispielsweise string_to_split
um einen Pfad handelt root/location/child/too_far.exe
und Sie nur den Ordnerpfad möchten, können Sie diesen aufteilen "/".join(string_to_split.split("/")[:-1])
und erhalten
root/location/child
Ohne RE (von dem ich annehme, dass Sie es wollen):
def remafterellipsis(text):
where_ellipsis = text.find('...')
if where_ellipsis == -1:
return text
return text[:where_ellipsis + 3]
oder mit einem RE:
import re
def remwithre(text, there=re.compile(re.escape('...')+'.*')):
return there.sub('', text)
Die Methode find gibt die Zeichenposition in einer Zeichenfolge zurück. Wenn Sie dann alles aus dem Charakter entfernen möchten, gehen Sie folgendermaßen vor:
mystring = "123⋯567"
mystring[ 0 : mystring.index("⋯")]
>> '123'
Wenn Sie den Charakter behalten möchten, fügen Sie der Charakterposition 1 hinzu.
import re
test = "This is a test...we should not be able to see this"
res = re.sub(r'\.\.\..*',"",test)
print(res)
Ausgabe: "Dies ist ein Test"
Aus einer Datei:
import re
sep = '...'
with open("requirements.txt") as file_in:
lines = []
for line in file_in:
res = line.split(sep, 1)[0]
print(res)