Как проверить, находится ли строка в начале новой строки? - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь использовать метод find() в Python, но столкнулся с проблемой.Похоже, что метод find() не позволяет вам проверять только текст на новой строке.Код ниже:

def ParseText(self, text):
    endIndex = 0
    startIndex = text.find("\n/obj/item/clothing")

    while startIndex != -1:
        text = text[startIndex:]
        endIndex = text.find("\n/") 
        part = text

        if endIndex != -1:
            part = text[:endIndex]

        self.ParseItem(part)
        startIndex = text.find("/obj/item/clothing", endIndex)

ParseText вызывается с полным текстом файла с новыми строками внутри.ParseText затем ищет /obj/item/clothing, затем вызывает ParseItem с дополнительным текстом.

Пример кода товара:
/obj/item/clothing/suit/armor/vest/ert name = "emergency response team armor" armor = list(melee=30, bullet=30, laser=30, energy=30, bomb=20, bio=0, rad=0)

Поиск в ParseText имеет проблему.Пока он обнаружит это:

/obj/item/clothing/suit/armor/vest/ert

Он также обнаружит это:

/datum/outfit/job/centcom/response_team/commander/amber
    suit = /obj/item/clothing/suit/armor/vest/ert/command

Обратите внимание на пробел и suit =.Из того, что я могу сказать, нет никакого способа проверить, начинается ли строка точно с новой строки.Есть идеи?

Ответы [ 3 ]

0 голосов
/ 31 декабря 2018

При первом вызове find () должен работать правильно, когда вы добавляете символ новой строки перед поисковым запросом.Я заметил, что во второй раз, когда вы это называете, у вас нет этого символа новой строки.Это позволит сделать так, что после того, как он найдет первый (начиная с новой строки), он продолжит оттуда и найдет любой результат, независимо от того, начинается ли он с новой строки.

0 голосов
/ 01 января 2019

Проверка строка за строкой текста (файла) выполняется в python путем простой итерации по нему:

for line in textfile:
    if line.startswith('/obj/item/clothing'):
        ParseItem(line)

, и если текст уже загружен в строковую переменную, вы можете легко разделить его наего строки с str.splitlines()
Итак, вы бы сделали

for line in text.splitlines():
   ... 
0 голосов
/ 31 декабря 2018

Я бы использовал re:

>>> print(txt)

aaabbb
bbbaaa
aaaccc
cccaaa

>>> import re
>>> list(m.group(0) for m in re.finditer(r'^aaa.*', txt, re.MULTILINE))
['aaabbb', 'aaaccc']

, поэтому ваш код будет:

import re
...
class ???:
    pattern = re.compile(r'^/obj/item/clothing.*', re.MULTILINE)

    def ParseText(self, text):
        for match in self.pattern.finditer(text):
            self.ParseItem(match.group(0))
...