在仅包含空格的列表中区分字符串

时间:2018-09-23 15:25:15

标签: python if-statement conditional conditional-statements

我正在尝试创建一个if语句,该语句可以区分列表中的两个字符串,唯一的区别是它们前面的空白量。

由于某种原因,我无法使用其中的任何一个。

with open(os.path.dirname(os.path.realpath(__file__)) + "\defaults\handling.meta") as file:
contents = file.readlines()

for index, item in enumerate(contents):
    if ("    </Item>" in item) and (index > old_start_lines[0]):

这不能区分

        </Item>

(8个空格)和

    </Item>

(4个空格)。像这样添加长度检查会产生错误:

    and (len(contents[index]) == 11):

这另外两个检查也分别导致未区别的结果和相同的错误。

    if (item.startswith("    </Item>")) and (index > old_start_lines[0]):
    if ("    </Item>" == item) and (index > old_start_lines[0]):

错误是:

  

IndexError:列表索引超出范围

以下是我正在处理的文本文件->列表的示例:https://pastebin.com/Vr87UXHF

谢谢

Alfie

编辑:完整项目-https://drive.google.com/file/d/1hcs1zkAu5xBWJYhZ97UXUcEkPdo-yQ4m/view?usp=sharing

2 个答案:

答案 0 :(得分:0)

一种简单的解决方法是在输入字符串的左侧去除空格:

if ("</Item>" in item.lstrip())

您还可以使用.strip()或.rstrip(),请参见https://docs.python.org/2/library/string.html#string.lstrip

答案 1 :(得分:0)

您需要使用Python的re来使空格与正则表达式完全匹配。

import re
with open('FilePath') as file:
contents = file.readlines()
regex = re.compile(r"^\s{8}<\/Item>")
#for 4 spaces you can replace 8 with 4


for index, item in enumerate(contents):
    if (bool(regex.search(item))):
        print (item)
        print('</Item> with 8 spaces')

输出:

        </Item>

</Item> with 8 spaces