我正在尝试在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 =
。据我所知,没有办法检查字符串是否完全从换行符开始。有什么想法吗?
答案 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():
...