我有这个文件(output.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],但它不完整且有括号
tech = re.findall(r'TECH-*', data)
答案 0 :(得分:0)
尝试
people = re.findall(r'\bUsername:(\S+)\s+domain:(\S+).*(TECH-\d+)', data)
答案 1 :(得分:0)
为此,您不需要Regular Expression,您可以使用内置的str.split()
,然后使用一个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]) )
答案 2 :(得分:0)
这可以通过将文本拆分为项目,进一步拆分以获取每个项目中的有用文本,然后进行一些简单的条件格式化来完成:
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
答案 3 :(得分:0)
终于找到了为什么上面没有任何工作:这是因为^M
我在文件中
它只有在vim中打开时才可见,当使用cat打开它时它是不可见的,一旦用
sys.stdout = open('out.txt','wt')
with open ("output.txt", "r") as myfile:
data=myfile.read()
print data.replace('\r','')
并使用@WiktorStribiżew代码:
people = re.findall(r'\bUsername:(\S+)\s+domain:(\S+)\s+First Name:(\S+)\s+Last Name:(\S+)\s+(TECH-\d+)', data)
我得到了理想的结果,谢谢大家!!