• 締切済み

pythonでsplitの使い方

rubyで次のようなコードを実行すると期待通りの結果が得られるのですが、pythonでは上手くいきません。pythonとrubyでは正規表現の使用の仕方に相違があるのでしょうか? str = "あかさたな&12345|abcde&67890|#$()=" cat = str.split(/&|\|&|/) print cat rubyでは ["あかさたな", "12345", "abcde", "67890", "#$()="] となりますが、 pythonでは / の所でinvalid syntax と叱られます。

みんなの回答

  • struct
  • ベストアンサー率72% (32/44)
回答No.1

一般的に、あるプログラミング言語で書かれたコードは 別の言語の処理系で動作しません。 言語ごとに固有の文法があるためです。 Pythonでは文法と正規表現が混合していないので、 複雑な文字列の分割は正規表現ライブラリを用いて書きます。 また、strという名前のタイプが既に存在するので、 変数として使用しないでください。 さらに、バイト文字列において日本語のみに対する特別の配慮は存在しません。 正しく動作するように文字列をunicodeにして処理してください。 import re s = u"あかさたな&12345|abcde&67890|#$()=" cat = re.split(ur"&|\||&||", s) print cat

030102
質問者

お礼

早速に有難うございます。 pythonも諦め様かなと思っていた矢先だったので非常にうれしく思います。目下pythonチュートリアルなどで勉強しておりますが、更に判り易い書籍などを教えていただければ有難く思います。

関連するQ&A

  • python3でMITMf

    MItMfというツールをpython3で実行しようとしたらエラーが出ました。 File "/home/kali/MITMf/mitmf.py", line 38 print get_banner() ^ SyntaxError: invalid syntax そもそもpythonで実行しようとしたらサポート終了なので次の リリースで削除予定と出ていました。 ご教示お願いします。

  • Python上での正規表現でどのように書けば?

    PHPで作ったプログラムをGAE(Google App Engine)/Python で作り替えています。 PHPの置換処理で、たとえば、以下の正規表現をPythonで書きたいのですが、どのようにすればいいでしょうか? mb_ereg_replace("無([いかきくけこ])","な\\1",$str); この質問は、別の言い方をすると次のようにもなります。 「Pythonで以下をひとつの正規表現で表現したい」 str = re.sub('無い','ない',str) str = re.sub('無か','なか',str) str = re.sub('無き','なき',str) str = re.sub('無く','なく',str) str = re.sub('無け','なけ',str) str = re.sub('無こ','なこ',str) どなたか、お分かりになる方、教えて頂ければと思います。

  • splitと同じ処理

    たとえば、 String[] s = new String[10]; String str = "abc:def:ghijk:lmn" s = str.split(":"); と同じようなことをsplitを使わずに簡単に行う(定石的な)方法はないでしょうか? 正規表現ではなく文字列による区切りのみの場合を考えます。

    • ベストアンサー
    • Java
  • python print文のエラー

    こんにちは。 今日、リカバリしたばかりのPCに、python3.1をインストールしコマンドラインモードからテスト代わりに 「print "Hello world!"」 と打って実行してみました。 しかし、「SyntaxError: invalid syntax」とエラーが出ます。 「print "Hello world!"」の最後の「"」でエラーが発生していると出たのですが、どういうことなのでしょうか。 pythonは始めたばかりで、参考書で最初に書いてあったのを実行してみたのですが…。しょっぱなからこれだと残念です。私の環境が悪いのかも知れませんが。 プログラミング経験はC、C++で中規模のアプリケーション、2Dゲームを作成した程度です。 お願いします。

  • pythonのシンタックスエラー

    python3のサンプルコードがあり、エラーが出ます。 内容はファイルを開いてちょっと変更して中身をプリントするというものです。 これは私が書いたのではなく、本の付録のサンプルなのですが、文法エラーとなります。何が原因かご指摘を頂ければと思いますが。文字コードの問題かなと思いましたが、UTF_8となっています。ファイルをdata.pyとして保存して、コマンドでpython data.pyを叩いたときに出てきます。(すみません、ここに張り付けた段階でインデントが見えなくなっているようですが、それは実際は問題ないです) file = "data.dat" limit = 2.0 with open(file, "r", encoding="utf_8") as fileobj: for i, line in enumerate(fileobj): if line == "\n": continue datalist = line.split(",") result = [int(float(num)<=limit) for num in datalist] print(f"{i}:{result}") #エラーメッセージ # File "data.py", line 9 # print(f"{i}:{result}") ^ #SyntaxError: invalid syntax これに関連する質問ですが、pythonはコンパイルしないようになっているみたいなので、コンパイル時のエラーと実行時のエラーの区別がつきません。このエラーは実際に動作してエラーが出ているということなのでしょうか。他の言語ではシンタックスエラーはコンパイルエラーなので実行前のエラーとは思いますが、文法チェックと実行の関係を教えて頂ければと思いますが。 よろしくお願いします。

  • splitでの文字列分割

    文字列中の「,」で分割をしたいのですが 「\,」では分割したくありません このような場合、どのような正規表現をかけばいいのでしょうか? <?php $str = "asd,fgh,qwge\,zxc"; $ary_ary = split("[^\],",$str); print_r($ary_ary); ?> ------結果------ Array ( [0] => as [1] => fg [2] => qwge\,zxc ) いろいろ考えてみましたが 上のようにうまくいきませんでした ご教示おねがいします

    • ベストアンサー
    • PHP
  • python 10を100で割ってでた極小値

    pythonの練習問題をやっていた、予期せぬ出力が出ました。 下記ケース1は、入力で 販売価格1,000円 消費税8% 消費税10% を 1000 8 10 のように入力し、期待される結果が出ています (値は通貨ですがわざとintをつけていません) ところがケース2のように販売価格を100円にしてみたところ、総額が 110.00000000000001 となり、最後に1が出た理由を知りたいと思っています。 n3 / 100 は0.1になると思いこんでいましたが、実際の計算上はそうではないようです。 ケース1 --------------------------- #入力 1000 8 10 n = input() sep = n.split(" ") n1 = int(sep[0]) n2 = int(sep[1]) n3 = int(sep[2]) hachi = n1 * (1 + n2 / 100) jyu = n1 * (1 + n3 / 100) print(str(hachi)) print(str(jyu)) # 出力 #1080.0 #1100.0 ケース2 ---------------------------- #入力 100 8 10 n = input() sep = n.split(" ") n1 = int(sep[0]) n2 = int(sep[1]) n3 = int(sep[2]) hachi = n1 * (1 + n2 / 100) jyu = n1 * (1 + n3 / 100) print(str(hachi)) print(str(jyu)) # 出力 # 108.0 # 110.00000000000001

  • python スクリプトファイルの実行

    プログラム初心者です。 pythonを始めて間もないです。 環境はwindows XPでpython2.6を使っています. IDLEエディタでprint "hello" と記入し、test.pyを作成しました。 保存先はC:\Python26になります。環境変数もコマンドラインでpythonと入力すれば起動してくれるように設定しています。 そこで、コマンドラインにpython test.pyと入力すると、File"<stdin>",line 1 python test.py SyntaxError: invalid syntax と返ってきます。 色々調べてみたのですが解決できず質問させていただきました。 どうかよろしくお願いします

  • pythonのスクリプトが動きません

    Webで"大きなPDFファイルを自動分割するPythonスクリプト" #!/usr/bin/env python # -*- coding: utf-8 -*- import os import glob import math import subprocess import re #==-User Parameter==== MAX_PDF_SIZE_MB=80 class PdfSplit: def __init__(self, fileName, resultpath): print("Split file name is "+fileName) #FileSizeCheck fsizeMB=float(os.path.getsize(fileName))/1000000 print("file size is "+str(fsizeMB)+" MB") if fsizeMB<=MAX_PDF_SIZE_MB: print("Not need split") return; nSplit=int(math.ceil(fsizeMB/MAX_PDF_SIZE_MB)) print("nSplit:"+str(nSplit)) nPage=self.GetPdfPageNumber(fileName) # nPage=888 print("nPage:"+str(nPage)) if nPage==0: print("Error: cannot read page:"+fileName) return onePage=int(math.ceil(nPage/nSplit)) print("onePage:"+str(onePage)) #result path finalpath=resultpath+"/"+fileName[2:-4] print("finalpath:"+finalpath) #Page split startpage=1 for i in range(nSplit): endpage=(i+1)*onePage if i==nSplit-1: endpage=nPage print "start page:"+str(startpage)+",endpage:"+str(endpage) cmd="pdftk "+fileName+" cat "+str(startpage)+"-"+str(endpage)+" output "+finalpath+"_"+str(i+1)+".pdf" # pdftk 元ファイル名.pdf cat 開始ページ-終了ページ output 出力ファイル名.pdf p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.wait() stdout_data, stderr_data = p.communicate() print stderr_data startpage=endpage+1 def GetPdfPageNumber(self,fileName): cmd="pdftk "+fileName+" data_dump" print cmd p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # p.wait() stdout_data, stderr_data = p.communicate() extracted=0 count=0 for strline in stdout_data.split("\n"): # print strline #sample NumberOfPages: 344 if "NumberOfPages" in strline: number = re.search("\d+",strline) extracted = number.group() break count+=1 if count>=100: break return int(extracted) class SplitManager(): def __init__(self): print "init" def Main(self): #Create Result dir RESULT_DIR='results' if not os.path.isdir(RESULT_DIR): os.mkdir(RESULT_DIR) files = glob.glob('./*.pdf') for file in files: PdfSplit(file,RESULT_DIR) if __name__ == '__main__': print __file__+" start!!" manager=SplitManager() manager.Main() が公開されていたので使用しようと思ったのですがうまく動作しません。 このスクリプトを使用するためにPython3.7.0b3とPDFtkをインストールしました。 そして、公開されていたシクリプトをtextにコピーしてpdf.pyという名前で保存しました。 最後にpdfファイルを収納したフォルダにpdf.pyを入れて、pdf.pyを実行しました。 しかしコマンドプロンプトが一瞬表示されるだけで動作しませんでした。 何か間違っているから動かないのだと思うのですが分からないので教えてください。 Pythonスクリプトの実行手順はこれで合ってますか。 それともPythonのスクリプトとバージョンが合ってないのでしょうか。 PCはWindows7です。 回答よろしくお願いします。

  • pythonのエラーについて教えて下さい。

    pythonの勉強をおこなっている超初心者です。 ネットでみた。以下のサンプルコードを実行しようとしました。 # -*- coding: utf-8 -*- print u'モジュールのロード' def test(): print u'関数:testを呼び出しました' if __name__ == '__main__': print 'python-izm' # print 'パイソンイズム' test() しかし、以下の様なエラーとなってしまいます。 File ”test02.py"、line 9 print ’python-izm'  ^ indentionError:expected an indented block ネット調べてみたとことpythonのインデントのエラーだとわかりました。 pythonはインデントで実行範囲を認識するので、 そこがうまく記述できていないであろうとは思うのですが、何回か試したのですが うまく動いてくれません。 どなたか御指南下さい。

専門家に質問してみよう