如何只取(.*)

2024-04-16 15:56:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: of项目文本import程序reidids
3条回答

下面的代码将返回与regex匹配的值列表。在您的情况下,它应该返回一个只有一项的列表。你知道吗

_str = 'Your project is ready. Your ID: A12345'    
re.findall(r'^Your project is ready. Your ID: (.*)$',_str)
#returns ['A12345']

当然,对于这样一个问题有多种解决办法。你知道吗

使用split()

正如你所建议的,一个人可以根据空格分句,然后取最后一个单词,例如:

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)用字符串变量project的空字符串""替换文本"Your project is ready. Your ID: "。你知道吗

您可以这样尝试:

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:'之前排除模式来缩短regex。然后它将查找出现在“Your ID:”旁边的ID。你知道吗

相关问题 更多 >