如何只服用(。*)

时间:2018-06-05 08:23:37

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

3 个答案:

答案 0 :(得分:0)

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

使用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)将字符"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。