2010-11-20 4 views
0

これは正規表現のパターンとして変数に格納された値をPythonが使用する方法ですか?正規表現パターンとして格納された変数を使用

begin_tag = '<%marker>' 
end_tag = '<%marker/>' 

doc = '<html> something here <%marker> and here and here <%marker/> and more here <html>' 

がどのようにbegin_tagとEND_TAG間のテキストを抽出します:

私は2つの変数を持っていると仮定?

タグは別のファイルを解析した後に決定されるため、修正されません。

+0

これを尋ねる必要がある場合、非常に基本的なものはありません。はい、あなたが 'foo'やハードコード' foo'を含む変数を持っていても、同じ方法を使うことができます。しかしそれとは別に、 '/ reg(ular)?ex(pression)?。html/i'に対する義務的なコメント:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml -self-contained-tags/1732454#1732454 – delnan

+0

あなたは '<' tag '>'の後に ''ではなく、 '<' tag '/>'を入れてもよろしいですか? – SingleNegationElimination

+0

それは本当に重要ではありません、タグはカスタムのものです、そして、私はちょうどテキストのセクションの終わりをマークするいくつかの方法を必要としました。 – momo

答えて

1

正規表現は文字列です。ちょうどあなたが使用したいあなたは正規表現と一致させたい変数を連結するなど、補間(使用%演算子)(+演算子を使用して)それらを連結::だからあなたはあなたがそれらを構築したい何かを行うことができます

begin_tag + ".*?" + end_tag 

唯一の落とし穴は、変数に正規表現エンジンが特別な意味を持つ文字を含む場合です。その場合、それらが正しくエスケープされていることを確認する必要があります。 re.escape()機能でこれを行うことができます。

通常の警告(「正規表現でHTMLを解析しない」)が適用されます。

+1

より安全な選択肢は 're.escape(begin_tag)+"。*? " + re.escape(end_tag) 'です。 – tzot

+0

私はregexpでHTMLを解析するのは良い考えではないと聞いたことがありますが、あなたのために解析するために特定のライブラリを使用する以外に、他にどのようなオプションがありますか?私は、これを処理できるDSLの作成を可能にする、pythonの "method_missing"メソッドを変更する方法を知らない。皮肉なことに、Rubyやioでの私の経験は非常に限られています(数日)、私はPythonでできないこの特定の事例に対応できる言語で何かを書くことができます。 – momo

2

正規表現をまったく使用しないでください。慎重にHTMLを解析する!

from BeautifulSoup import BeautifulSoup 
marker = 'mytag' 
doc = '<html>some stuff <mytag> different stuff </mytag> other things </html>' 
soup = BeautifulSoup(doc) 
print soup.find(marker).renderContents() 
+0

私は、私がやろうとしている、BeautifulSoupのカスタムタグを解析できません。 – momo

+1

... Um。 HTMLでカスタムタグを使用する理由XMLが本当に必要ですか?このタスクには別のテンプレートを使用してください。 – SingleNegationElimination

関連する問題