我在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”。我只需要这个字符
答案 0 :(得分:0)
对于这样的问题,当然有多种解决方案。
正如你所建议的那样,人们可以根据空格来分割句子并使用最后一个词,例如:
ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[project.split()[-1] for project in ListOfProjects]
在这里,您迭代ListOfProjects
,根据空格拆分每个project
并取最后一个字,即ID。
因为每个句子都以'您的项目准备就绪。您的ID:',即32个字符,您可以简单地取出前32个字符后的所有内容:
ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[project[32:] for project in ListOfProjects]
其中project [32:]接受字符串项目并删除前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
。
答案 1 :(得分:0)
下面的代码将返回与正则表达式匹配的值列表。在您的情况下,它应该返回一个只包含一个项目的列表。
_str = 'Your project is ready. Your ID: A12345'
re.findall(r'^Your project is ready. Your ID: (.*)$',_str)
#returns ['A12345']
答案 2 :(得分:0)
您可以尝试这样:
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
如果整篇文章'你的项目准备好了。您的ID:MixCaseID'不需要您可以通过在'your \ s * id:'之前排除模式来缩短正则表达式。然后,它会查找“您的ID:”旁边显示的ID。