我在python中有一个循环,在每次迭代中,程序都会从控制台读取文本。在此文本中有一个字符Id。我读到的消息是“您的项目已准备就绪。您的ID: dfgdfgfd”,因此id在每次迭代中都会有所不同。在每次迭代之后,ID应该转到循环外部的列表中。我正在尝试这样做,但我认为有一种更好的方法,只需在(.*)中获取ID并将其附加到Id列表中,而不是提取行并将其拆分并获取6,仅获取Id并附加它。
import os
import sys
import re
ListOfProjects={projectA, projectB, projectC, projectE}
List_Of_Ids=[]
for x in ListOfProjects:
IdFullText=sys.stdin.readline()
Id=re.compile(r'Your project is ready. Your ID: (.*)')
matches = Id.finditer(IdFullText)
List_Of_Ids.append(Matches)我只想在列表中获取id,它在每次迭代中都是不同的。“您的项目已经准备好了。您的ID:”这句话总是相同的,但()中的id每次都会不同,比如"dfsdf“或”dsgfsdvc“。我只需要这个字符
发布于 2018-06-05 16:39:33
当然,对于这样一个问题,有多种解决方案。
使用拆分()
正如你所建议的,你可以根据空格拆分句子,然后取最后一个单词,例如:
ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[project.split()[-1] for project in ListOfProjects]在这里,您遍历ListOfProjects,根据空格拆分每个project,并获取最后一个单词,即ID。
使用字符串索引
因为每句话都以'Your project ready. Your ID:‘开头,即32个字符,你可以简单地取前32个字符之后的所有内容:
ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[project[32:] for project in ListOfProjects]其中project32:获取字符串项目并删除前32个字符。
使用字符串替换
另一种解决方案是用空字符串替换字符串的第一部分:
ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[project.replace("Your project is ready. Your ID: ", "") for project in ListOfProjects]使用正则表达式
import re
ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[re.sub("Your project is ready. Your ID: ", "", project) for project in ListOfProjects]在这里,re.sub("Your project is ready. Your ID: ", "", project)将文本"Your project is ready. Your ID: "替换为字符串变量""的空字符串project。
发布于 2018-06-05 17:03:12
下面的代码将返回与正则表达式匹配的值的列表。在本例中,它应该返回一个只有一项的列表。
_str = 'Your project is ready. Your ID: A12345'
re.findall(r'^Your project is ready. Your ID: (.*)$',_str)
#returns ['A12345']发布于 2018-06-05 17:29:24
您可以这样尝试:
import re
if __name__=='__main__':
matches = re.findall('(?i)your\s*project\s*is\s*ready\.\s*your\s*id:\s*(.*)', "Your project is ready. Your ID:MixCaseID\nYour project is ready. Your ID:1234566\nYour project is ready. Your ID:lowercaseid\nYour project is ready. Your ID:UPPERCASEID\nYour project is ready. Your ID:PROJ-0001")
for m in matches:
print(m)结果如下:
MixCaseID
1234566
lowercaseid
UPPERCASEID
PROJ-0001这里:
(?i) = Case insensitive match
\s* = whitespace zero or more times如果不需要整个文本'Your project ready.YOUR ID: MixCaseID‘,您可以通过在' Your \s*id:’前排除pattern来缩短正则表达式。然后,它将查找出现在“您的ID:”旁边的ID。
https://stackoverflow.com/questions/50695467
复制相似问题