3266696 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.11
2023.10
2023.09
2023.08
2023.07

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2008.04.12
XML
カテゴリ:IronPython
『IronPython の世界』を読む (5) の続き。Part 4 .NET Framework のライブラリを使用する - 正規表現: re モジュールのあたりを読む。

IronPython は CPython とは異なり、.NET Framework の正規表現 (System.Text.RegularExpression) を使って実装されています。

ということで、基本的なところではだいたい同じような感じなのだが、注意しなければ使えないところのようだ。

例えば、IronPython だと次のようにマルチラインを (?m:) のようなメタ文字で表現できるが、CPython ではできない。

>>> re.findall(r"(?m:^abc)", "abc\nabc2\nabc3")
['abc', 'abc', 'abc']

CPython なら、re.M を使って次のように書くところ(IronPython でも、これは OK)。

>>> re.findall(r"^abc", "abc\nabc2\nabc3", re.M)
['abc', 'abc', 'abc']

他にも、下のようなものがある。

  • re. M 、(?m: パターン) 複数行のマッチ
  • re.I 、(?i: パターン) 大文字、小文字無視のマッチ
  • re.S 、(?s: パターン) メタ文字"."をすべてを含むすべての文字にマッチ
  • ない 、(?x: パターン) パターンから空白を除去

正規表現オブジェクトも、CPython が

>>> matchstr=re.compile(r"[0-9]")
>>> type(matchstr)
<type '_sre.SRE_Pattern'>

となるのに対して、IronPython だと、

>>> matchstr=re.compile(r"[0-9]")
>>> type(matchstr)
<type 'RE_Pattern'>

のように違う。

IronPython内部では独自の「IronPython.Modules.PythonRegex+RE_Pattern」で実装しています。

ということらしい。

ということで、次のようなグループ名も微妙に書き方が違ったりする。

IronPython
matchstr=re.compile(r"(?<user>[^@]+)@(?<host>.+)")

CPython
matchstr=re.compile(r"(?P<user>[^@]+)@(?P<host>.+)")

(?m:) みたいのは CPython との互換性を考えて使わず、グループの表現も CPython に合わせて書いておいた方が混乱しなくていいなとか思う。IronPython でも ?P の表現は OK なようなので。

そういうところはよいとしても、

CPython が 「[('johondo', 'tempuri.org')」というタプルのリストを返すのに対して、IronPythonは「("johndoe@tempuri.org')] というリストを返します。

みたいなところは、ちょっとイヤだな。正規表現エンジンの実装が違うから仕方ないといえば仕方ないのだけど。

こういうところは、注意して使うしかない。けれども、人が作った CPython で公開されたモジュールを使うときには、import re しているものがあれば、チェックする必要があるということが分かった。


IronPythonの世界


なかのひと






お気に入りの記事を「いいね!」で応援しよう

Last updated  2008.04.12 05:32:37
コメント(0) | コメントを書く
[IronPython] カテゴリの最新記事



© Rakuten Group, Inc.