長時間/初回。ストリップの正規表現の置き換え
私は職場でのタスク自動化のようなものではなく、主にPython 3.xのために私に役立つ様々な言語でコードする方法を自分自身で教える動きを薬師です。私はautomatethebororingstuff電子ブックを介して作業しており、それが素晴らしい見つける。
第7章の練習問題の1つを完了しようとしています: "文字列を受け取り、strip()文字列メソッドと同じことをする関数を記述してください。文字列を削除すると、空白文字は文字列の先頭と末尾から削除されます。それ以外の場合は、関数の2番目の引数で指定された文字が文字列から削除されます。
文字列に表示したい文字が表示されているときに詰まっています。 'ssstestsss'.strip(S)
#!python3
import re
respecchar = ['?', '*', '+', '{', '}', '.', '\\', '^', '$', '[', ']']
def regexstrip(string, _strip):
if _strip == '' or _strip == ' ':
_strip = r'\s'
elif _strip in respecchar:
_strip = r'\'+_strip'
print(_strip) #just for troubleshooting
re_strip = re.compile('^'+_strip+'*(.+)'+_strip+'*$')
print(re_strip) #just for troubleshooting
mstring = re_strip.search(string)
print(mstring) #just for troubleshooting
stripped = mstring.group(1)
print(stripped)
それが上でそれを実行し、示されたようとして 'testsss 'を得られます(' ssstestsss'、' S')。+それのすべてを取得し、*それをすることができます最後の 'sss'を無視する。もし私が最終的なものを+に変えれば、それは単に「テスト」を生み出すために少ししか改善しない。私がキャプチャグループを貪欲でない(すなわち(+)?)にすると、私はまだ「testsss」を取得し、キャプチャグループの文字クラスから文字を除外して終了文字列アンカーを削除すると(すなわちre.compile('^'+_strip+'*([^'+_strip+'.]+)'+_strip+'*')
「テ」と私は明らかに、その後のエラーを、それを最後列のアンカーを削除しない場合。冗長と散歩-yの質問に対する
謝罪。
私は故意に私のようにすべてのコード(作業中)に含ま私のコードはおそらくむしろ非効率的であることに気付くので、コードを改善することができる他の領域を見ることができれば、教えてください。このコードの実用的なアプリケーションはありませんが、これを学習練習としてやります。
私はこの質問を適切に尋ねて、私の検索で何かを見逃していないことを願っています。
よろしく
Lobsta
エスケープ記号には文字クラスを使用しませんでした。また、 're.escape'を使って特別な文字をエスケープするだけで良いでしょう。 –
'(。+)?'は '(。+?)'と同じではありません。 – Blckknght