0

我有一个由多个块组成的文本文件,如下所示:

TestVar 00000000  WWWWWW 222.222 222.222 222.222
UNKNOWN ,,,,,,,,  ,,,,,,  ,,,,,,

我想得到以下输出:每个部分总是 8 个字符长(例如 TestVar ,00000000) 从以 testvar 开头的每一行我希望代码返回:

WWWWWW_00000000

有人可以帮我解决这个问题吗?

谢谢

4

4 回答 4

2

假设您不希望我们在这里为您编写代码是一个非常具体的链接 http://docs.python.org/howto/regex.html#regex-howto

请记住,您可能希望使用 findall()... 并使用 r' 编写代码,而不是经常需要反斜杠...

您可能想向我们展示您已经编写但无法正常工作的代码,以便我们可以帮助您更好地 gl

于 2012-09-12T13:55:55.737 回答
1

使用正则表达式模式^TestVar\s+(\d{8})\s+(\S+),您可以得到 >>

import re
p = re.compile('^TestVar\s+(\d{8})\s+(\S+)')
m = p.match('TestVar 00000000  WWWWWW 222.222 222.222 222.222')
if m:
    print 'Match found: ', m.group(2) + '_' + m.group(1)
else:
    print 'No match'

在这里测试这个演示。


要查找多行input字符串中的所有匹配项,请使用:

p = re.compile("^TestVar\s+(\d{8})\s+(\S+)", re.MULTILINE) 
m = p.findall(input) 

要了解有关 Python 正则表达式的更多信息,请参阅http://docs.python.org/howto/regex.html

于 2012-09-12T13:44:35.633 回答
1

您提到了多次出现的模式,在这种情况下,您可以re.findall使用re.MULTILINE

input_string = """
TestVar 00000000  WWWWWW 222.222 222.222 222.222
UNKNOWN ,,,,,,,,  ,,,,,,  ,,,,,,
TestVar 22222222  AAAAAA 222.222 222.222 222.222
UNKNOWN ,,,,,,,,  ,,,,,,  ,,,,,,
"""


import re
pat = re.compile("^TestVar\s+(\d{8})\s+(\S+)", re.MULTILINE)
matches = pat.findall(input_string)

# Result: matches == [('00000000', 'WWWWWW'), ('22222222', 'AAAAAA')]

for num, let in matches:
    print "%s_%s" % (num, let)
于 2012-09-12T14:10:20.987 回答
0

没有正则表达式:

lines = ["TestVar 00000000  WWWWWW 222.222 222.222 222.222",
         "UNKNOWN ,,,,,,,,  ,,,,,,  ,,,,,,"]
print [toks[2].strip(' ')+'_'+toks[1] for toks in \
        [[line[i:i+8] for i in xrange(0,len(line),8)] for line in lines] \
       if toks[0] == 'TestVar ']
于 2012-09-12T14:01:56.037 回答