str = "<test>0</test>"
print re.search("<.*?>", str).group()
print re.search(">.*?<", str).group()
>> <text>
>> >0<
結果のテキストが「test」と「0」になり、正規表現でマーカーとして使用した2つの文字が含まれないようにするには、どうすればよいですか?
XML/HTML の解析に正規表現を使用しないでください。murgatroid99 のコメントを参照してください。
そうは言っても、正規表現を使用してこの例で必要な結果を得る方法は次のとおりです。キャプチャ グループを使用します。
>>> s = "<test>0</test>"
>>> print re.search(r"<(.*?)>", s).group(1)
test
>>> print re.search(r">(.*?)<", s).group(1)
0
str
組み込み型をマスクするため、変数名として使用しないでください。
キャプチャ グループの代わりに、lookbehind と lookaheadがあります。
>>> print re.search(r"(?<=<).*?(?=>)", s).group()
test
>>> print re.search(r"(?<=>).*?(?=<)", s).group()
0
これらについては特に生の文字列リテラル ( r"..."
) を使用する必要はありませんが、バックスラッシュが適切に処理されるように、正規表現を記述するときにそれらを使用する習慣を身に付けることをお勧めします。
必要なテキストを後方参照に配置する必要があり、 re.sub を使用してその文字列を置き換えることができます。
ちなみに、これは 1 つの正規表現で実行できます。
"<\([^>]\)*>"
私はそれをテストしませんでしたが、文字列を後方参照 (\1) に置き換えるだけで動作するはずです。
編集: 申し訳ありませんが、タグ内のテキストも必要であることに気づきませんでした..