2017-01-22 6 views
0

私はPythonとRegexを学習しています。 ここには文字列があり、特殊文字をhtmlコードに置き換える必要があります。コードは以下の通りです:検索と置換 - 。subst(置換、文字列[、数= 0]) - 特殊文字では機能しません。

str= '\nAxes.hist\tPlot a histogram.\nAxes.hist2d\tMake a 2D histogram plot.\nContours\nAxes.clabel\tLabel a contour plot.\nAxes.contour\tPlot contours.' 

p = re.compile('(\\t)') 
p.sub('<\span>', str) 
p = re.compile('(\\n)') 
p.sub('<p>', str) 

このコードは変更されていない特殊文字(\n\t)を残します。

私はregex101.comで正規表現パターンをテストしています。なぜコードが動かないのか分かりません。

+0

キャリッジとタブをエスケープしないで試しましたか?それはあなたの文字列でエスケープされていません。また、 'str'を変数名として使用しないでください。 –

+1

少なくとも、* Python *で 'str'を再定義しないでください。ここでは、標準型の名前です。 –

+2

'r'raw strings''を正規表現に使用してください。そうしないと、バックスラッシュで問題がなくなります。 – jonrsharpe

答えて

0

subメソッドを実行していて、結果が ではないという問題があります。インプレースの文字列は変更されません。 新しい 文字列を返します。したがって

(理由でs代わりにstrを用いて、上記に説明):\n\tも同様に機能すること

p = re.compile('(\\t)') 
s = p.sub('<\span>', s) 
p = re.compile('(\\n)') 
s = p.sub('<p>', s) 

注意。

+0

ありがとう!しかし、あなたのコードは\ tを<\\span>に置き換え、私は理解できない理由で<\span>と置き換えます。 – gk7

+0

インタラクティブモードで見ていれば、バックスラッシュは2倍になります。これは、ソースコードで使用するのと同じ形式で*表現*を表示しているためです。しかし、 'print(s) 'でそれを表示すると、より読みやすい(しかしあいまいな)モードになります。 'str()'と 'repr()'を調べます。 –