ノート/テキストマイニング
訪問者数 292      最終更新 2016-02-29 (月) 13:45:44

Pythonの正規表現を確認

参照

サンプル

まとめると

まず、よく使いそうな正規表現そのもの

? : 0回か1回の繰り返し
+ : 1回以上の繰り返し
* : 0回以上の繰り返し
{m,n} : 最小m回で最大n回
^ : 文字列の先頭
$ : 文字列の末尾
. : 任意の一文字(なんでもいい)
[] : 文字クラスの指定。[]のうちに記されたいずれか

\d : 任意の十進数
\D : 数字以外の文字すべて
\s : 空白文字。タブや改行なども含まれる
\S : 空白文字以外の文字すべて
\w : アルファベット、数字、下線のすべて
\W : アルファベット、数字、下線以外のすべて

で、あとはエスケープ\に気を付けること。

正規パターンを文字列としておくのだが、pythonでは接頭文字rを付けることになっている。

r'[1-9]%%[a-z]'

ユニコード文字を使いたければ接頭文字はuでいいらしい。

この正規表現(パターン)を、予めコンパイルしておくことができる。

p = re.compile(r'[a-z]')

次に、正規表現を使う側のやり方は、いくつかあるみたい。まずmatchとsearch、それにgroup。

いろいろな変種がある。

l = re.findall('\d+', '123abc456def')
print(l) # ['123', '456']

l = re.findall('\d+', 'abc def')
print(l) # []  該当なしなので空

置換えは、subが使える

re.sub(r'\d+', 'xxx', '123abc456def')

貪欲vs非貪欲

u = re.match('<.*>', '<html><head><title>Title</title>')
print u.span(), u.group()   # (0, 32) <html><head><title>Title</title>

となり、<>のペアでは無く、最長の<>になっている。これは具合が悪いことも多いので、.*でなくて.*?とすると

u = re.match('<.*>', '<html><head><title>Title</title>')
print u.span(), u.group()   # (0, 6) <html>

とできる。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-29 (月) 13:45:44 (571d)