2012-03-01 10 views
0

私はPythonを使用してCSVファイルからExcelファイルを作成しています。私は、セルのデータが "="で始まり、それをExcelの関数として印刷するとどこに到達しようとしています...しかし、私は運がないのです。私は "="で始まるかどうかを調べるために文字列の正規表現を実行しようとしましたが、動作しません。これまでのところ私がPythonで持っていたことは次のとおりです。Pythonで正規表現を実行するにはどうしたらいいですか?

import xlwt 
import re 

string = '=HYPERLINK("http://www.google.com";"Google")' 

if re.match("^=", string) == True: 
    formData = re.sub('=', '', string) 
    sheet.write(row_count,col-1, Formula("'" + formDta + "'"),style) 

これは正しいアプローチではないのですか、間違った構文ですか?どのように私はこの仕事をすることができます上の任意の提案?

答えて

1

本当に正規表現は必要ありません。次のようなものがあります:if string.startswith('='): do something言っ

、ここPython documentation for the re moduleからの抜粋です:

Pythonは、正規表現に基づいて、2つの異なるプリミティブな操作提供しています:試合のためにしばらくの検索をチェックし、文字列の先頭にのみマッチの一致チェックを文字列内のどこにでも置くことができます(これはPerlがデフォルトで行います)。あなたがre.match()を使用している場合は、^ライン開始アンカーが不要であると言うことです

EDIT:@aixはre.match()の行動について正しいです - それは唯一の行全体にパターンと一致しますあなたのコードが動作しない理由はre.match()をということである

0
s = '=HYPERLINK("http://www.google.com";"Google")' 

if s.startswith('='): 
    ... 

(その一部ではありません。)入力文字列全体が正規表現と一致する場合にのみTrueを返します。あなたの場合、最初の文字だけが行います。 re.search()を使用するか、正規表現を"^=.*"に変更します。しかし、私はstartswith()が良いアプローチだと思う。

P.S.変数stringをシャドーしないように変数の名前を変更しました。

1

問題は、Trueと比較していることです。 PythonのTrueは論理オブジェクトです。 re.match()matchオブジェクトを返します。 Pythonが2つを比較すると、型が一致せず、ifのテストが失敗します。

if re.match(regexp, string): 

Pythonはifwhileテストの目的のために、真として最も非False、非None値を扱います:

Pythonで正規表現のテストを行うための慣用的な方法はです。上記のコードではその動作を使用しています。正規表現が一致する場合はmatchオブジェクトが返され、テストに合格します。正規表現が一致しない場合、Noneが返され、テストは失敗します。

関連する問題