我有一个由多个块组成的文本文件,如下所示:
TestVar 00000000 WWWWWW 222.222 222.222 222.222
UNKNOWN ,,,,,,,, ,,,,,, ,,,,,,
我想得到以下输出:每个部分总是 8 个字符长(例如 TestVar ,00000000) 从以 testvar 开头的每一行我希望代码返回:
WWWWWW_00000000
有人可以帮我解决这个问题吗?
谢谢
假设您不希望我们在这里为您编写代码是一个非常具体的链接 http://docs.python.org/howto/regex.html#regex-howto
请记住,您可能希望使用 findall()... 并使用 r' 编写代码,而不是经常需要反斜杠...
您可能想向我们展示您已经编写但无法正常工作的代码,以便我们可以帮助您更好地 gl
使用正则表达式模式^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
您提到了多次出现的模式,在这种情况下,您可以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)
没有正则表达式:
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 ']