Sed
這可以用sed完成嗎?
我寫了一個簡單的python程序來做一些文本處理。我想用 sed 將句子分成幾行,使用劇本/舞台劇中的文本作為輸入。我試圖用 sed 寫它,但不能。我想知道它是否可以用sed完成?
import re test_txt = """ Brigitte: Ich hoffe, du hast während des Lockdowns nicht alle Benimmregeln vergessen. Bernd: Entschuldige bitte. Das muss an der Vorfreude liegen. Endlich wieder kann ich meinen Cappuccino im Sitzen genießen und muss ihn nicht heimlich aus einem Pappbecher in irgendeiner Nische in der Fußgängerzone trinken. Wie nervig das war, Maske runter, einen Schluck trinken, Maske wieder auf, und immer die Gegend im Blick haben, damit ich die Leute vom Ordnungsamt rechtzeitig sehe. Brigitte: Das ist mal wieder typisch. Du denkst nur an dich und lässt dabei das Wesentliche aus den Augen. Bernd: Häh? (Fesnik erscheint, bringt die Karten) Fesnik: Herzlich willkommen im Adria, schön, dass sie bei uns sind. Bernd: Ich habe Ihren Cappuccino wirklich vermisst. Brigitte: Wir hatten schon Angst, dass Sie nicht wieder aufmachen. Fesnik: Eine unbegründete Sorge, Signorina. (Fesnik ab, Bernd und Brigitte studieren die Karten) Brigitte: Signorina heißt Fräulein, wusstest du das eigentlich? Typisch Italiener, schleimen uns """ actor_pattern = '.+:' lines = test_txt.splitlines() speech = '' i = 0 while i < len(lines): if re.match(actor_pattern, lines[i]): while True: speech += lines[i].replace('\n', ' ').replace( '. ', '.\n').replace( '? ', '?\n').replace( '! ', '!\n').replace( ') ', ')\n') i += 1 if not i < len(lines): break if re.match(actor_pattern, lines[i]): print('') break else: i += 1 print(speech, end='') speech = '' print('\nEND')
因此輸出是:
Brigitte:Ich hoffe, du hast während des Lockdowns nicht alle Benimmregeln vergessen. Bernd:Entschuldige bitte. Das muss an der Vorfreude liegen. Endlich wieder kann ich meinenCappuccino im Sitzen genießen und muss ihn nicht heimlich aus einem Pappbecher inirgendeiner Nische in der Fußgängerzone trinken. Wie nervig das war, Maske runter,einen Schluck trinken, Maske wieder auf, und immer die Gegend im Blick haben, damit ichdie Leute vom Ordnungsamt rechtzeitig sehe. Brigitte:Das ist mal wieder typisch. Du denkst nur an dich und lässt dabei das Wesentliche ausden Augen. Bernd:Häh?(Fesnik erscheint, bringt die Karten) Fesnik:Herzlich willkommen im Adria, schön, dass sie bei uns sind. Bernd:Ich habe Ihren Cappuccino wirklich vermisst. Brigitte:Wir hatten schon Angst, dass Sie nicht wieder aufmachen. Fesnik:Eine unbegründete Sorge, Signorina.(Fesnik ab, Bernd und Brigitte studieren die Karten) Brigitte:Signorina heißt Fräulein, wusstest du das eigentlich? Typisch Italiener, schleimen uns END
程式碼找到一個actor_pattern,加入下一行,然後將每個句子換成新行,直到找到另一個actor_pattern,然後以這種方式繼續遍歷這些行。
我不確定您的“actor_pattern”及其用法是什麼。這個簡單可以讓你走多遠
sed
?它非常接近您想要的結果,但可能需要一些改進:sed -Ez 's/\n/ /g; s/([.?!)]) ([^(])/\1\n\2/g' file Brigitte: Ich hoffe, du hast während des Lockdowns nicht alle Benimmregeln vergessen. Bernd: Entschuldige bitte. Das muss an der Vorfreude liegen. Endlich wieder kann ich meinen Cappuccino im Sitzen genießen und muss ihn nicht heimlich aus einem Pappbecher in irgendeiner Nische in der Fußgängerzone trinken. Wie nervig das war, Maske runter, einen Schluck trinken, Maske wieder auf, und immer die Gegend im Blick haben, damit ich die Leute vom Ordnungsamt rechtzeitig sehe. Brigitte: Das ist mal wieder typisch. Du denkst nur an dich und lässt dabei das Wesentliche aus den Augen. Bernd: Häh? (Fesnik erscheint, bringt die Karten) Fesnik: Herzlich willkommen im Adria, schön, dass sie bei uns sind. Bernd: Ich habe Ihren Cappuccino wirklich vermisst. Brigitte: Wir hatten schon Angst, dass Sie nicht wieder aufmachen. Fesnik: Eine unbegründete Sorge, Signorina. (Fesnik ab, Bernd und Brigitte studieren die Karten) Brigitte: Signorina heißt Fräulein, wusstest du das eigentlich? Typisch Italiener, schleimen uns
sed
版本是(GNU sed)4.7。該腳本使用該-z
選項(並非在所有版本上都可用)將整個文本讀入記憶體,然後用<NL>
空格替換所有字元,從而形成一個長行,然後<NL>
在所有句子結束字元後添加字元。