0

ここに示すような複数のブロックで構成されるテキストファイルがあります。

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

次の出力を取得したいと思います。各部分は常に8文字の長さです(例:TestVar、00000000)testvarで始まる各行から、コードを返します。

WWWWWW_00000000

誰かがこれを手伝ってくれますか?私は以前に正規表現を使用しましたが、Pythonを使用したことはなく、両方にまったく慣れていません。

ありがとう

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 に答える