Python 如何仅取(.*)

Python 如何仅取(.*),python,Python,我在python中有一个循环,在每次迭代中,程序都从控制台读取文本。在此文本中有一个字符Id。我正在阅读的消息是“您的项目已经准备好了。您的ID:dfgdfgfd”,因此每个迭代中的ID都是不同的。在每次迭代之后,ID应该转到循环之外的列表。我正在尝试这一点,但我认为有更好的方法,只需在(.*)中获取ID并将其附加到ID列表中,而不是获取行并拆分它,然后获取[6],只需获取ID并附加它 import os import sys import re ListOfProjects={project

我在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”。我只需要这个字符

对于这样一个问题,当然有多种解决方案

使用split() 正如您所建议的,可以根据空格拆分句子,并使用最后一个单词,例如:

ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[project.split()[-1] for project in ListOfProjects]
在这里,您可以遍历
项目列表
,根据空格拆分每个
项目
,并获取最后一个单词,即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]
使用正则表达式
此处
re.sub(“您的项目已准备就绪。您的ID:,”,project)
将文本
“您的项目已准备就绪。您的ID:
替换为字符串变量
project
的空字符串

下面的代码将返回与正则表达式匹配的值列表。在您的情况下,它应该返回一个只包含一项的列表

_str = 'Your project is ready. Your ID: A12345'    
re.findall(r'^Your project is ready. Your ID: (.*)$',_str)
#returns ['A12345']
您可以这样尝试:

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
在这里:


如果全文“你的项目准备好了”。不需要您的ID:MixCaseID。您可以通过在“您的\s*ID:”之前排除模式来缩短正则表达式。然后,它将查找出现在“您的ID:”旁边的ID。

因此,您希望从标准输入中读取文本并将其附加到列表中,对吗?几乎,我只希望在列表中包含ID,这在每次迭代中都是不同的。“您的项目准备就绪。您的ID:”这句话始终是相同的,但是()中的ID每次都会不同,例如“dfsdf”或“dsgfsdvc”。我只需要这个字符什么是
projectA,projectB,projectC,projectE
?它们是字符串吗?它们是字符串谢谢你,Thijs,我试过了,但我想用正则表达式。
MixCaseID
1234566
lowercaseid
UPPERCASEID
PROJ-0001
(?i)   =  Case insensitive match
\s*    =  whitespace zero or more times