Python正则表达式返回以特定字符串开头的行

2024-06-25 23:07:44 发布

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

我有这个文件(输出.txt)你知道吗

Username:traider

domain:domain.net

 
TECH-1366


Username:traider1

domain:domain.net

 
TECH-1367

我可以在用户名和域之后获取值

 traider,domain.net
 traider1,domain.net

但我不知道怎么得到TECH-XXX

期望输出:

traider,domain.net,TECH-1366
traider1,domain.net,TECH-1367

代码:

with open ("output.txt", "r") as myfile:
  data=myfile.read()

people = re.findall(r'\bUsername:(\S+)\s+domain:(\S+)\s', data)

for personinfo in people:
    print(','.join(personinfo))

我只能返回[技术],但它是不完整的,有括号

tech =  re.findall(r'TECH-*', data)

Tags: 文件retxtdatanetdomainusernamepeople
3条回答

试试看

people = re.findall(r'\bUsername:(\S+)\s+domain:(\S+).*(TECH-\d+)', data)

这可以通过将文本拆分为多个项目来实现,进一步拆分以获得每个项目中有用的文本,然后使用一些简单的条件格式:

txt="""Username:traider

domain:domain.net


TECH-1366


Username:traider1

domain:domain.net


TECH-1367"""

out = ''
for item in txt.split():
    desired_value = item.split(':')[-1]
    out += desired_value
    if ':' in desired_value:
        out += ','           
    else:
        out += '\n'

或使用理解:

''.join('%s,' % item.split(':')[-1] if ':' in item else '%s\n' % item for item in txt.split())

输出:

traider,domain.net,TECH-1366
traider1,domain.net,TECH-1367

您不需要Regular Expression为此,您可以使用内置的^{},然后使用List Comprehension来“捆绑”您的数据:

txt="""Username:traider

domain:domain.net


TECH-1366


Username:traider1

domain:domain.net


TECH-1367"""

l = txt.split()

#udt = [ l[i:i + 3] for i in range(0, len(l), 3)]
# equivalent to list-comprehension above
udt = []
for i in range(0, len(l), 3):
    udt.append( l[i:i + 3] )

print(udt)

印刷品

[['Username:traider', 'domain:domain.net', 'TECH-1366'], ['Username:traider1', 'domain:domain.net', 'TECH-1367']]

要根据需要打印:

for e in udt:
    print(",".join(map(lambda f:f.split(":")[-1], e)))

印刷品

traider,domain.net,TECH-1366
traider1,domain.net,TECH-1367

并结合起来

d = [e.split(":")[-1] for e in txt.split()]
for i in range(0, len(d), 3):
    print( ",".join(d[i:i+3]) )

相关问题 更多 >