我有一个由多个块组成的文本文件,如下所示:
TestVar 00000000 WWWWWW 222.222 222.222 222.222
UNKNOWN ,,,,,,,, ,,,,,, ,,,,,,
我想得到以下输出: 每个部分总是8个字符长(例如TestVar,00000000) 从testvar开始的每一行我希望代码返回:
WWWWWW_00000000
有人可以帮我解决这个问题吗?我之前使用的是正则表达式,但从来没有使用过python,对我们两个都很新。
由于
答案 0 :(得分:2)
假设您不希望我们为您编写代码 这是一个非常具体的链接 http://docs.python.org/howto/regex.html#regex-howto
请记住,您可能希望使用findall()... 并使用r'编写代码而不是经常需要反斜杠...
您可能希望向我们展示您已编写的代码并且无法正常工作,以便我们可以更好地为您提供帮助 GL
答案 1 :(得分: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'
测试此演示here。
要在多行input
字符串中查找所有匹配项,请使用:
p = re.compile("^TestVar\s+(\d{8})\s+(\S+)", re.MULTILINE)
m = p.findall(input)
要了解有关使用Python的正则表达式的更多信息,请参阅http://docs.python.org/howto/regex.html
答案 2 :(得分: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)
答案 3 :(得分: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 ']