制限付きバッククォートブロック抽出
最大4096文字から、列ゼロの3個のバッククォートと任意のASCII言語ラベルによるブロックを抽出してください。
import re
def fenced_blocks(text):
if type(text) is not str or len(text) > 4096:
raise ValueError("fence.input")
blocks, body, language = [], None, None
for line in text.splitlines():
if body is None:
opening = re.fullmatch(r"```([A-Za-z0-9_-]*)", line)
if opening:
body, language = [], opening[1]
elif line == "```":
blocks.append((language, "\n".join(body)))
body = None
else:
body.append(line)
if body is not None:
raise ValueError("fence.unclosed")
return blocks
モデル
OpenAI互換またはAnthropicのエンドポイントを、ベースURLと必要なAPIキーで設定し、接続をテストします。ローカルのモデルサーバーは起動が必要です。リモートツールは別途データを送信する場合があります。
プロジェクト
空ブロックと改行正規化を試し、閉じていないブロックを拒否し、他のMarkdown形式は解釈せずコードも実行しないでください。
適用前に確認
実際の動作を期待する結果と比較します。検証に失敗した場合は、次の変更を加える前に原因を調べてください。
import re
def fenced_blocks(text):
if type(text) is not str or len(text) > 4096:
raise ValueError("fence.input")
blocks, body, language = [], None, None
for line in text.splitlines():
if body is None:
opening = re.fullmatch(r"```([A-Za-z0-9_-]*)", line)
if opening:
body, language = [], opening[1]
elif line == "```":
blocks.append((language, "\n".join(body)))
body = None
else:
body.append(line)
if body is not None:
raise ValueError("fence.unclosed")
return blocks
抽出の契約を実行から切り離す
FenceLiltは、入力規則を意図的に限定した小さなテキスト処理機能を作る開発者向けのWindows AIコーディングワークスペースです。プロジェクトを開き、認識すべきもの、そのままにすべきもの、不完全な入力の報告方法を説明します。接続したモデルは、その境界に照らしてソースを調べ、変更を提案できます。
フェンス付きコードブロックの抽出は具体的な課題です。既存例のマーカーと言語ラベルの規則を使い、空ブロックや改行を含めた受け入れ形式を検討します。実装をレビューする前に、閉じていないブロックをパーサー案がどう扱うか説明を求めてください。抽出された本文はテキストです。その中の何かを実行する選択は、別の要件を持つ別機能になります。
パッチを調べた後、プロジェクトで出力を厳密に照合するテストを実行し、誤って再解釈してはならない非対応形式も含めます。抽出成功だけでなくサイズ制限とエラー処理もレビューしてください。AIの支援には、対応するOpenAI互換またはAnthropicのエンドポイントを、必要に応じて認証情報とともに設定します。サービスが提供すれば制限のないモデルを選べますが、コンテキスト容量とツールの利用可否はサーバーに依存します。有用なセッションの成果は、受け入れる言語と失敗時の動作を明確に説明できる変更です。
限定された抽出機能を確認する
コードブロックの抽出は内容の実行を意味しますか?
いいえ。この課題は定義されたマーカーの契約に従ってテキストを返します。その後の実行判断は抽出と分け、返された本文の処理が予期せずコマンドを呼び出したりソースを評価したりしないよう後続コードをレビューしてください。
このルーチンはすべてのMarkdownフェンス形式を受け付けるべきですか?
既存例は意図的に限定した形式に対応しています。必要なマーカーとラベルを列挙し、明示的に確認してください。他のMarkdown形式への拡張は要件変更であり、パーサーの整理に自動的に伴うものではありません。
閉じていないブロックをどう扱うべきですか?
変更を実装する前に、不完全な入力を拒否するか示します。例の課題では拒否します。ブロックが開いたまま終端に達するテストを含め、呼び出し側がその結果を適切に提示するか検証してください。
非対応の例をテストに残すのはなぜですか?
機能の境界を示すためです。モデルが提案した式が余分な形式を認識し、明らかな失敗なしに動作を変える場合があります。受け付けるテキストと変更しないテキストを一緒に確認し、意図した境界を保ってください。
FenceLilt · 更新日 2026-10-25