在Python中删除字符串而不删除重复字符

时间:2018-08-10 14:52:27

标签: python

我正在将文件夹名称打印到包含数据的文本文件中,并想从字符串中删除外部文件夹。例如,它正在打印C:\A3200\201808101040,但是我要打印201808101040 。当我使用str(os.getcwd().strip('C:\\A3200\\'))删除要打印的外部文件夹时,程序返回180810104,这很奇怪,因为某些零被删除了,而有些零没有被删除,等等。(它删除了开头的{ {1}}和结尾20。)

我知道可以通过使用不同于0的方式获取文件夹名称来完成此操作,但是我对将来的这种字符串操作方法很感兴趣。

如何删除完整字符串中的某些字符串而又不影响稍后在完整字符串中重复的字符?

4 个答案:

答案 0 :(得分:1)

Strip接受一个 set 个字符,并从两侧移开,直到遇到一个字符不在集合中。这就是为什么它吃掉您的2和0而不吃掉1的原因。os.getcwd().split(os.sep)[-1]

答案 1 :(得分:1)

  

这可能有效,但是我想知道如何做以供将来参考   只是按字符串操作,以防万一我需要删除其他类似的东西   “梨”来自“洋梨树”等,其中两个单词中都带有“ e”

您可以做'pear tree'.replace('pear', '', 1).strip()

答案 2 :(得分:0)

a=r"C:\A3200\201808101040" # make sure you read it raw
a[a.rindex("\\")+1:] #'201808101040'

OR

如果您只需要将'C:\ A3200'和'201808101040'分开

a=r"C:\A3200\201808101040"
a.rsplit("\\",1)[1] #'201808101040'
a.rsplit("\\",1)[0] #'C:\A3200'

答案 3 :(得分:0)

此特定问题的答案是使用os.path.basename()

关于您的更广泛的问题:“ 如何删除完整字符串中的某些字符串,而又不影响稍后在完整字符串中重复的字符?

我会考虑使用正则表达式(regex)。这使您可以指定正面和负面的前瞻/后视以及许多其他有用的技巧。就您的情况而言,我会考虑搜索该字符串,而不是实际上替换该字符串中的任何字符。这是您问题的正则表达式示例:

import re

s = r'C:\A3200\201808101040'

matches = re.findall(r'[0-9]+', s)

print(matches)

收益:

['3200', '201808101040']

很显然,在这种情况下,您对matches中返回的最终比赛很感兴趣,因此可以通过matches[-1](给出201808101040)进行访问。