从python中的字符串中获取字符

时间:2012-09-12 13:41:40

标签: python regex

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

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

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

WWWWWW_00000000

有人可以帮我解决这个问题吗?我之前使用的是正则表达式,但从来没有使用过python,对我们两个都很新。

由于

4 个答案:

答案 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 ']