さて、9回目です。
ちょっと難しい問題に取り組んでいきます。
それでは、正規表現2回目。
defを用いた置換を紹介します。
app = Application;log = app.LogMessage
import re
def repl(m):
dictRepl = {
"Model":"A",
"Model1":"B",
"Model2":"C",
"sphere":"maru"
}
try:
return dictRepl[m.group()]
except:
return m.group()
for oObj in app.Selection:
s = "%s -> %s"%( oObj.FullName,re.sub("\w+",repl,oObj.FullName) )
log(s)
こんな感じの時に実行しています。
このコードは、辞書を使ったパターン置換です。
dictRepl = {
"Model":"A",
"Model1":"B",
"Model2":"C",
"sphere":"maru"
}
この辞書の部分で、
Model → A
Model1 → B
Model2 → C
sphere → maru
という置換の定義をする事にしています。
法則というか決まりごとですね。
そして、置換するメソッドとしてsubを使用しています。
re.sub("\w+",repl,oObj.FullName)
第1引数は、拾うパターン。
第2引数は、置換する文字列。またはファンクション。
第3引数は、置換する対象です。
第1引数の \w+
これは、[A-Za-z0-9_]と同じになります。
A~Z、a~z、0~9と_にヒットします。
つまり、XSIの場合"."ドットまで、ひとくくりです。
第2引数は repl
通常は文字列ですが、defを使用出来ます。
上記は、replファンクションが入ります。
このファンクションには、引数として、マッチオブジェクトが入る事になっています。
1でヒットしたマッチオブジェクトです。
return dictRepl[m.group()]
そして、上記replのmに引数が渡され、辞書の値を返します。
例えばこのようにキーを入力すると、値を取ることが出来ます。
dictRepl["Model"] -> "A"
Model なら A が返ってきます。
それと、新たにtry except文を入れてみました。
これは、エラーを吐いても例外に飛ぶことが出来る文です。
try内で、エラーが発生したら、except(例外)に飛びます。
マッチオブジェクトが、Model3というものにヒットした場合、無い辞書のキーを取ってしまうとエラーになります。
dictRepl["Model3"]
これは、エラーですので、回避して何も変換しないという
m.group()
を返すことにしています。
今回は、あまり利用価値が無いものかもですが、一応メモ的な感じです。
応用としては、ターゲットの指定のときに役に立つかなぁとも思ってます。
コンストとか、Definition指定するの面倒ですものね。
とはいえ、正規表現はこの位で終わりますね。
そういえば、JScriptでも同じようなことが出来ますから、別にPythonでなくてもいいんですけどね。
連想配列で検索です。
VBは知りません。
ではでは。
ちょっと難しい問題に取り組んでいきます。
それでは、正規表現2回目。
defを用いた置換を紹介します。
app = Application;log = app.LogMessage
import re
def repl(m):
dictRepl = {
"Model":"A",
"Model1":"B",
"Model2":"C",
"sphere":"maru"
}
try:
return dictRepl[m.group()]
except:
return m.group()
for oObj in app.Selection:
s = "%s -> %s"%( oObj.FullName,re.sub("\w+",repl,oObj.FullName) )
log(s)
こんな感じの時に実行しています。
このコードは、辞書を使ったパターン置換です。
dictRepl = {
"Model":"A",
"Model1":"B",
"Model2":"C",
"sphere":"maru"
}
この辞書の部分で、
Model → A
Model1 → B
Model2 → C
sphere → maru
という置換の定義をする事にしています。
法則というか決まりごとですね。
そして、置換するメソッドとしてsubを使用しています。
re.sub("\w+",repl,oObj.FullName)
第1引数は、拾うパターン。
第2引数は、置換する文字列。またはファンクション。
第3引数は、置換する対象です。
第1引数の \w+
これは、[A-Za-z0-9_]と同じになります。
A~Z、a~z、0~9と_にヒットします。
つまり、XSIの場合"."ドットまで、ひとくくりです。
第2引数は repl
通常は文字列ですが、defを使用出来ます。
上記は、replファンクションが入ります。
このファンクションには、引数として、マッチオブジェクトが入る事になっています。
1でヒットしたマッチオブジェクトです。
return dictRepl[m.group()]
そして、上記replのmに引数が渡され、辞書の値を返します。
例えばこのようにキーを入力すると、値を取ることが出来ます。
dictRepl["Model"] -> "A"
Model なら A が返ってきます。
それと、新たにtry except文を入れてみました。
これは、エラーを吐いても例外に飛ぶことが出来る文です。
try内で、エラーが発生したら、except(例外)に飛びます。
マッチオブジェクトが、Model3というものにヒットした場合、無い辞書のキーを取ってしまうとエラーになります。
dictRepl["Model3"]
これは、エラーですので、回避して何も変換しないという
m.group()
を返すことにしています。
今回は、あまり利用価値が無いものかもですが、一応メモ的な感じです。
応用としては、ターゲットの指定のときに役に立つかなぁとも思ってます。
コンストとか、Definition指定するの面倒ですものね。
とはいえ、正規表現はこの位で終わりますね。
そういえば、JScriptでも同じようなことが出来ますから、別にPythonでなくてもいいんですけどね。
連想配列で検索です。
VBは知りません。
ではでは。
コメント