如何检查字符串是否在新行的开头?

时间:2018-12-31 16:40:03

标签: python string search

我正在尝试在python中使用find()方法,但是遇到了问题。 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 :(得分:1)

当您在搜索词之前包含换行符时,第一次调用find()应该可以正常工作。我注意到您第二次调用它时,您没有该换行符。这样一来,在找到第一个(从换行开始)后,它将继续从那里继续查找任何结果,无论它是否从换行开始。

答案 1 :(得分:0)

我会使用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))

答案 2 :(得分:0)

逐行检查文本(文件)是在python中通过简单地对其进行迭代来完成的:

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

,如果文本已经加载到字符串变量中,则可以使用str.splitlines()
轻松地将其拆分为几行 那你就可以

for line in text.splitlines():
   ...