首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >How to take only(.*)

How to take only(.*)
EN

Stack Overflow用户
提问于 2018-06-05 16:23:37
回答 3查看 59关注 0票数 0

我在python中有一个循环,在每次迭代中,程序都会从控制台读取文本。在此文本中有一个字符Id。我读到的消息是“您的项目已准备就绪。您的ID: dfgdfgfd”,因此id在每次迭代中都会有所不同。在每次迭代之后,ID应该转到循环外部的列表中。我正在尝试这样做,但我认为有一种更好的方法,只需在(.*)中获取ID并将其附加到Id列表中,而不是提取行并将其拆分并获取6,仅获取Id并附加它。

代码语言:javascript
复制
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“。我只需要这个字符

EN

回答 3

Stack Overflow用户

发布于 2018-06-05 16:39:33

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

使用拆分()

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

代码语言:javascript
复制
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个字符之后的所有内容:

代码语言:javascript
复制
ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[project[32:] for project in ListOfProjects]

其中project32:获取字符串项目并删除前32个字符。

使用字符串替换

另一种解决方案是用空字符串替换字符串的第一部分:

代码语言:javascript
复制
ListOfProjects={projectA, projectB, projectC, projectE}
List_of_Ids=[project.replace("Your project is ready. Your ID: ", "") for project in ListOfProjects]

使用正则表达式

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2018-06-05 17:03:12

下面的代码将返回与正则表达式匹配的值的列表。在本例中,它应该返回一个只有一项的列表。

代码语言:javascript
复制
_str = 'Your project is ready. Your ID: A12345'    
re.findall(r'^Your project is ready. Your ID: (.*)$',_str)
#returns ['A12345']
票数 0
EN

Stack Overflow用户

发布于 2018-06-05 17:29:24

您可以这样尝试:

代码语言:javascript
复制
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)

结果如下:

代码语言:javascript
复制
MixCaseID
1234566
lowercaseid
UPPERCASEID
PROJ-0001

这里:

代码语言:javascript
复制
(?i)   =  Case insensitive match
\s*    =  whitespace zero or more times

如果不需要整个文本'Your project ready.YOUR ID: MixCaseID‘,您可以通过在' Your \s*id:’前排除pattern来缩短正则表达式。然后,它将查找出现在“您的ID:”旁边的ID。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50695467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档