2017-08-23 13 views
0

私は電報ボットを開発中です。テレグラムは長すぎるメッセージを送信することはできません。私のボットはテキストを生成しなければならず、長すぎる場合、それを複数のメッセージに分割してリストに入れて、それを一つずつ送ることができる関数を書いた。 私が現在行っていることは:python:未処理のhtmlタグを翻訳するスティールを分割

message = "" # random text with variable lenght 
max_chars_per_message = 4000 
length_message = len(message) 
splitted_message_list = [] 
for i in range(0, length_message, max_chars_per_message): 
    splitted_message = [message[i:i+max_chars_per_message]] 
    splitted_message_list.append(splitted_message) 

実際にうまくいきます。私の問題は、テキストにHTMLタグが含まれている場合です。その関数が次のようなことをすることができるようにしたいと思います: 'max_chars_per_message'文字ごとにメッセージを分割しますが、メッセージが閉じられていないhtmlタグで終了する場合は、タグが開始されてその部分を次の分割メッセージ。

例: 間違っ:

this is a <b> te|st </b> message

右:

this is a |<b> test </b> message

サポートされており、HTMLタグを使用するには、あなたは正規表現を使用して考えがありhere

+0

を試してみましたか? –

+0

また、テキスト全体がいくつかのHTMLタグの中にあるときにどうなるか考えましたか? – Kendas

+0

@ brunodesthuilliers私は実際には、最後に閉じられていないHTMLタグがあるかどうかをチェックして、その部分を次のメッセージに変換する方法を知ることができません。私は、どのタグにも閉じた部分があるかどうかチェックすることを考えていましたが、その後はかなり複雑に見えます。 – 91DarioDev

答えて

1

ですか?私は正規表現専門家ではないんだけど、これは私のベストエフォートのようになります。

import re 

string = 'this is a <b> test </b> message <b> another text </b>' 
output = re.split(r'(<.+?>)', string) 

出力:

['this is a ', '<b>', ' test ', '</b>', ' message ', '<b>', ' vamo ', '</b>', ''] 

あなたがHTMLを削除し、テキストのみのリストを作成したい場合は、次の

output = re.findall(r'>(.*?)<', string) 

出力:あなたは何を

[' test ', ' message ', ' another text '] 
関連する問題