2017-03-06 6 views
-1

元のファイルの形式は次のとおりです。K:またはM:で始まる2つのヘッダー行。 任意の長さ(ただしK:またはM:ヘッダーで始まらない)の不定数の(ASCII)テキスト行:
K:cccc ...
M:cccc ...
CCCC ..
CCC ..
..
...
K:CCCC ...
M:CCCC ...
CCCC ..
CCC ..
..
...
M:CCCC ...
K:CCCC ...
CCCC ..
CCC。 。
...
...
などPython regexを使用して行の始まりに依存する改行を置換する方法

Cは任意のASCII文字であるので、任意のライン上のcccc...のようなものが考えられます。

&/DM%hdma76H?」,,, 3DD」

@は最後のファイルでのM/K-ためのスイッチを確認します。
K:CCCC ...
M:CCCC ...
CCCC ..
CCC ...
私は何をする必要があることはそうのように、元のファイルとの間に余分な\ nの中に置くことです。 。
...

K:CCCC ...
M:CCCC ...
CCCC ..
CCC ..
..
..
など

これは明らかに簡単な作業ですが、私はregexでやりたいと思います。その理由は、この作業は多くのものの1つです 私はこのファイルを行い、他のすべての場合正規表現は問題なく使用されます。好奇心のちょうどちょうど!

これは私が成功せず、Pythonでしようとしたものです:

re.sub('(?<!^[KM]:)(.+)(\n)(?=^[KM]:)','\g<1>\n\n',file,flags=re.MULTILINE) 

考え方は単純です:またはM:あなたはKで始まらない行を取得するとKで始まる行が続きます。またはM:余分な\ nを入れます。それを行うには 私は複数行で実行する必要があります。代わりに、\ nがヘッダ行の間にも挿入されます。

あなたの時間と助けに感謝します。

+0

"KかMを使用するのではなく、 ':'"(?=^[KM] :)私は "K"を使うでしょう。 :またはM: " "not"と同じこと。 – Wli

+1

're(r '\ n(?:[KM]:。* \ n?){2})'、r '\ n \ n \ 1'、ファイル) ' –

答えて

0

あなたはKまたはMで始まる2行のブロックを探し、そして前に改行を追加することができます。これは、出力

import re 

text = """K:cccc...<br> 
M:cccc...<br> 
cccc..<br> 
cccc..<br> 
..<br> 
..<br> 
K:cccc...<br> 
M:cccc...<br> 
cccc..<br> 
cccc..<br> 
..<br> 
..<br> 
M:cccc...<br> 
K:cccc...<br> 
cccc..<br> 
cccc..<br> 
..<br> 
..<br> 
etc""" 

pattern = re.compile('((^[KM].*\n){2})', re.MULTILINE) 
print re.sub(pattern,r'\n\1',text) 

:改行が追加されることを

K:cccc...<br> 
M:cccc...<br> 
cccc..<br> 
cccc..<br> 
..<br> 
..<br> 

K:cccc...<br> 
M:cccc...<br> 
cccc..<br> 
cccc..<br> 
..<br> 
..<br> 

M:cccc...<br> 
K:cccc...<br> 
cccc..<br> 
cccc..<br> 
..<br> 
..<br> 
etc 

注意を

+0

エレガント!どうもありがとう!それがそれを解決しました。 – DJL

+0

@DJL:最初の行の改行が必要ですか? –

+0

まあ、実際には私は空の行に分割して元のファイルを回復しようとしていますが、今は分割された実装が最初の空行をどのように処理するのかは分かりません。 "ファイル"かどうか。しかし、これは小さな問題です:) – DJL

関連する問題