UTF-8 版 newLISP で日付を抽出する。

 前の blog で紹介した “newLISP で日付を抽出する”と“newLISP で日付を抽出する(再び)”の UTF-8 対応です。
 先ずは、スクリプトから、

(define dateMatchStr 
  {([  ]*[0-90-9]{2,4})?[  ]*[./\-・/-‐年]?([  ]*[0-90-9]{1,2}[  ]*)[./\-・/-‐月]([  ]*[0-90-9]{1,2})日?}
)
(define (number-zen2han str)
  (replace "[  ]" str "" 2048)    ; added 2010/11/ 8
  (replace "[0-9]" str (char (+ (- (char $0) 0xFF10) 0x30)) 2048))

(define (convert-2slash str) 
  (trim 
    (replace "[.\\-・/-‐年月日]" (number-zen2han str) "/" 2048)
    "/"))

(define (divide-with-date str (flag true))
  (let (res (regex dateMatchStr str 2048))
    (if res (list (0 (res 1) str)
                  (if flag (convert-2slash (res 0)) (res 0))
                  ((+ (res 1) (res 2)) str)))))

 前の時のように、正規表現文字列を複数用意せずに済み、コードもすっきり(笑)。
 (2010/ 9/23 区切り文字から全角と半角のスペースを削除。)
 ちなみに、全角には、(マイナス記号)と(ハイホン記号)の両方を用意しました。また、半角の -(ハイホン-マイナス記号)の前には、\(エスケープ文字)が必要です。前の時の文字列では付いていませんが、たまたま動作する配置になっています(汗)。
 全角->半角変換には前回のスクリプトを使ってもいいのですが、数字だけなので専用にしました。漢数字も対応といきたいところですが、それはまた、別の機会に。
 動作は、

> (divide-with-date "出張 3/13 横浜")
("出張" "3/13" " 横浜")
> (divide-with-date "10月11日芋煮会")
("" "10/11" "芋煮会")
> 

 こんな感じ。
 関数divide-with-date の追加した第二引数を nil にすると、

> (divide-with-date "10月11日芋煮会" nil)
("" "10月11日" "芋煮会")
> 

 日付は、入力のまま出力されます。

 以上、如何でしょうか?

No comments yet

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。