我有一个字符串,如何删除某个字符后面的所有文本?(在这种情况下是 ...
)
之后的文本...
会变化,因此我想要删除某个特定字符后面的所有字符。
在分隔符上最多拆分一次,并取第一个片段:
sep = '...'
stripped = text.split(sep, 1)[0]
您没有说明如果分隔符不存在应该发生什么。在这种情况下,无论是此解决方案还是Alex的解决方案都将返回整个字符串。
假设你的分隔符是'...',但它可以是任何字符串。
text = 'some string... this part will be removed.'
head, sep, tail = text.partition('...')
>>> print head
some string
如果没有找到分隔符,head
将包含原始字符串的全部内容。
partition 函数在 Python 2.5 中被添加。
S.partition(sep)
-> (head, sep, tail)
在字符串 S 中搜索分隔符 sep,并返回分隔符前面的部分、分隔符本身和分隔符后面的部分。如果没有找到分隔符,则返回S和两个空字符串。head,* _ = text.partition('...')
- Sigmatics<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
。没有使用正则表达式(我假设这是您想要的):
def remafterellipsis(text):
where_ellipsis = text.find('...')
if where_ellipsis == -1:
return text
return text[:where_ellipsis + 3]
或者,使用正则表达式:
import re
def remwithre(text, there=re.compile(re.escape('...')+'.*')):
return there.sub('', text)
import re
test = "This is a test...we should not be able to see this"
res = re.sub(r'\.\.\..*',"",test)
print(res)
输出结果:"This is a test"
方法find将返回字符串中的字符位置。然后,如果您想从该字符删除所有内容,请执行以下操作:
mystring = "123⋯567"
mystring[ 0 : mystring.index("⋯")]
>> '123'
从文件中获取:
import re
sep = '...'
with open("requirements.txt") as file_in:
lines = []
for line in file_in:
res = line.split(sep, 1)[0]
print(res)
另一种在字符串中删除最后一个字符之后的所有字符的方法(假设您想要删除最后一个“/”之后的所有字符)。
path = 'I/only/want/the/containing/directory/not/the/file.txt'
while path[-1] != '/':
path = path[:-1]
path
的新副本,因此它并不是特别高效的解决方案,尽管我同意它应该可以工作。 - joanis