[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 12/14 15:13 / Filesize : 194 KB / Number-of Response : 810
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現 Part5



1 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:07:28 ]
正規表現(Regular Expression)スレです。

質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。

前スレ
正規表現 Part4
pc11.2ch.net/test/read.cgi/tech/1186030400/

515 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 21:03:49 ]
PHP使ってるからテンプレートエンジン使ったらどうだろうか

516 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 02:35:21 ]
よくわかんないけど、%date%→2008/12/12 %name%→田中みたいにして

%name%様への%date%のお知らせです。

田中様への2008/12/12のお知らせです。みたいになるようにしたいんじゃないの?
正規表現っていうか普通に置換すればいいだけじゃないの?%name%→%date%とかなると置換順序によってはおかしくなるから、
そこは%name%を%date%で置換したいなら%%date%%と入力しといて後で%%を%に(ryみたいにすればいいと思うけど。
>>514は何が言いたいのか良くわからない。
>>515に同意。Smartyとか使えば全部やってくれるから楽だけど…

517 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 09:24:04 ]
>>516
>%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
この文章を素直に解釈すると、同じ「%adv%」でも状況に応じて
「こんにちは」にも「さようなら」にもなるって事じゃないのかな。
で、そういう状況依存的な内部状態を持つ操作は、
変数や条件判断文のあるプログラミング言語でないと不可能。
何か変?

518 名前:506 mailto:sage [2008/12/13(土) 22:59:58 ]
>>507-509
正規表現の(現時点での)限界があることはわかりました。
が、自然言語の「(ある種の)典型的な表現」を滑らかに翻訳するという狭いクラスのタスクに対しては
正規表現がその強力な威力を発揮できると今でも思っています。

519 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:02:11 ]
限界とか威力とか意味わかんね。
正規表現なんて正規文法を別の記号で書き直しただけじゃん。
数学的に厳密な定義のあるものなんだから、
明日になって威力が変わったりしないよ。

520 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 02:58:28 ]
正規表現を、どんな夢でもかなえてくれる魔法の呪文とでも勘違いしてないか?

521 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 08:53:37 ]
文法の表現力では
正規文法 < 文脈自由文法 < 文脈依存文法 < 解析表現文法

522 名前:デフォルトの名無しさん [2008/12/15(月) 00:24:39 ]
ABCを含まない行にマッチさせたい場合

^(?!.*ABC)  ←OK
(?!.*ABC)  ←NG

となるのでしょうか?
上記の違いが分かりません


523 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 00:38:48 ]
>>522
.*がABCを食うから。



524 名前:デフォルトの名無しさん [2008/12/15(月) 00:49:37 ]
^があるとなぜ食えないんですか?

525 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:52:03 ]
/^(?!.*ABC)/の場合、まず/^/が文字列の頭にマッチする。
そこから後ろ(即ち元の文字列全体)が、/^(.*ABC)/にマッチしなければ、全体としてマッチする。

/(?!.*ABC)/の場合は、どんな文字列であっても末尾にマッチする。
なぜなら文字列の末尾から後ろ(即ち空文字列)は/^(.*ABC)/にマッチしないから。

526 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 15:17:08 ]
>>517
あーなるほどね。1回目の%adv%では「こんにちは」、2回目の%adv%では「さようなら」にしたい、とかか。
そりゃ正規表現じゃ無理だわ。いや、限定的な状況ならいけるかもしれないけど。

527 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:11:49 ]
含まない行、のような指定は、できるなら -v オプションとか
正規表現より上のレイヤでやったほうがよい。

528 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:32:43 ]
それはスレ違い

529 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:58:47 ]
いいんじゃない?
正規表現だけでは何もできないんだから。
perl とか、テキストエディタとか、そのた言語と組み合わせないと。

530 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:12:40 ]
perlとかテキストエディタとかその他の言語のサポートまではしてられないってことだろ。よう知らんけど。

531 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:43:09 ]
>>527はどこまで正規表現を使うべきかという立派な正規表現ネタに見えた。
正規表現で実現可能なことは無理してでも正規表現を使え
なんていう愚かなスレでもないだろうw

532 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 09:10:18 ]
実用的な解と、パズル的な解か。

533 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 14:32:23 ]
例えば、 ABC と DEF という文字列があったとき、

ABCの場合
ABC (123)

DEFの場合
DEF (345)

という形に置き換えるのは可能でしょうか?
また、可能ならどのように書いたらいいでしょうか



534 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 14:53:58 ]
>>533
できる。正規表現は
/ABC/
/DEF/

意地悪はさておき、ABCやDEFを検出するのは正規表現だけど
置換をするのはそれぞれの「実装言語や処理系ソフトウェア」だから
>>5のテンプレ埋めてくれないと答えられない。

535 名前:533 mailto:sage [2008/12/22(月) 15:54:12 ]
すみません
訂正します

●正規表現の使用環境
Jane Style Version 3.01

●検索か置換か?
検索後に置換

●説明
文字列にマッチさせた後、マッチした文字列ごとに指定された文字列を後ろに
追加させて置換させたい

●対象データ
@ ABC
A DEF

●希望する結果
@ ABC (123)
A DEF (345)

536 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 16:25:00 ]
普通の置換でよくね?

537 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 16:51:55 ]
すみません、説明が足りませんでした

この二件だけの場合は二つ表現を書けばいいですが、
後ですぐに置換したい文字列を追加できるよう、(ABC|DEF)のように
orか何かでまとめて作りたいと思っています

それは可能でしょうか
それともやはり一つ一つ書いたほうがいいでしょうか

538 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:24:29 ]
>>537
まとめようにも法則性が無いが。

539 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:27:44 ]
てか、Jane Style って専ブラだよね?
どういう機能で何をしようとしてるのかがわからないとどうにもアドバイスのしようが...
(このスレは基本的には、grepやawkやPerlやPythonやJavaの正規表現のスレなので)

540 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:41:12 ]
<rx2>(?<=ABC)[TAB] (123)[TAB]msg
<rx2>(?<=DEF)[TAB] (345)[TAB]msg



541 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:35:21 ]
これですね。ちゃんと書いてあります。
www.monazilla.org/index.php?e=65

542 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:36:27 ]
>>538
あまり正規表現について詳しくないもので
やはりちょっと無理がありましたね・・・

>>539
すみません
少し勘違いをしていました

>>540
有難うございます!
すごくスッキリしていていいですね
参考にさせて頂きます

543 名前:デフォルトの名無しさん [2008/12/27(土) 19:09:30 ]
perl で

abc-def-1234-ghi-jkl
これから
abc-def
を取りたい

1234は数字が4文字です
1234の前を取るのはどうすればいいですか?




544 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 19:14:41 ]
「取る」とは?

「抽出したい」 → 結果として abc-def が欲しい
「削除したい」 → 結果として -1234-ghi-jkl が欲しい
どっち?

できれば >>5 を参考に。

545 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 19:31:16 ]
もっと高級言語っぽい表記で書けるといいのになぁ。

546 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 19:31:35 ]
(ちょっと変えました)
prelで

●検索か置換か?
検索

●説明
12-34は数字が2文字ハイフン2文字です
(\d{2}-\d{2} こうかな?)

12-34の前を抽出するにはどうすればいいですか?
12-34の前の部分に数字が2文字は無いです。

●対象データ
abc3-d5ef-12-34-ghi-jkl
ho-1ge=+-e67-89+fuga++--jkl


●希望する結果
abc3-d5ef-
ho-1ge=+-e


547 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 20:59:42 ]
>>546

12-34でもその一般化したパターンでも使ってマッチングさせてから
特殊変数 $` や@- を参照するなり他の手段で抜き出すなりすればよろしかろ?


548 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 23:26:09 ]
>>546
カッコ ( ) をつかえばいいよ。

549 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 11:20:42 ]
>>546
print /(.*)(?=\d{2}-\d{2})/ ? "match:[$1]\n" : "unmatch.\n" for qw(
abc3-d5ef-12-34-ghi-jkl
ho-1ge=+-e67-89+fuga++--jkl
);

550 名前:デフォルトの名無しさん [2009/01/01(木) 12:55:59 ]
単純にたくさんのテキストファイルから目当てのキーワードのある行を
正規表現で検索したい場合、Windows環境だとどのツールが便利・一般的なの?
秀丸かな?
Unixだとgrepコマンドがあるけど…

551 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:29:08 ]
>>550
一般がどうかはしらないけど自分は秀丸やxyzzyの機能を使ってる

552 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:32:37 ]
grepでいいよ

553 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:44:45 ]
XP以降だと標準でfindstrコマンドがあるね
Cygwinを入れるのもいいし、各種テキストエディタに頼るのもいい

でも一番の検索ツールは、



| 何について調べますか?
| ┌────────────┐
| |                   |
| |                    |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ



554 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:51:57 ]
| 何について調べますか?
| ┌────────────┐
| | おまいの消し方        |
| |                    |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ

555 名前:550 mailto:sage [2009/01/01(木) 14:13:35 ]
さんくす、やっぱりそのへんかぁ。

556 名前:551 mailto:sage [2009/01/01(木) 14:17:19 ]
このスレのせいで550がイルカの虜になってしまった
なんて親切なスレなんだ

557 名前:553 mailto:sage [2009/01/01(木) 14:17:59 ]
名前間違えた、>>556は553

558 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 11:43:20 ]
2007ではイルカ出なくなってるよね

559 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 11:46:47 ]
冴子先生がいい

560 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 16:37:56 ]
スターウォーズのジャージャービンクス
Office のイルカ

大ヒットメーカーが調子に乗りすぎて生み出してしまった
世界の2大うざキャラ。

561 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 17:31:36 ]
なんかわかるw

562 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 11:11:00 ]
perlで下のような場合にマッチさせたいのですが、どのようにすればいいのでしょうか?

<[a-z]+ lang="ja">.*?</[a-z]+>

最初の[a-z]+と最後の[a-z]+は同じタグを指定したいのですが、
このままだと、</a>や</b>といった終了タグが先に引っかかってしまい、
いびつな形でマッチしてしまいます。

563 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:22:05 ]
>>562
正規表現一発じゃキツい
スキャナを書くか、素直にHTMLパーザ使った方が



564 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:36:17 ]
>>562
バックリファレンスかな
<([a-z]+) lang="ja">.*?</\1>
こんな感じで

565 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:36:39 ]
単純にそういう条件だと\1使えばいいんじゃ? いろいろやるつもりなら
結局パーサ使った方が楽ってことになりそうだけどね。

$s = q{<hoge lang="ja"><a>hogehoge</a><b>hoge</b></hoge>};
print $& if $s =~ m{<([a-z]+) lang="ja">.*?</\1>};

566 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:54:09 ]
>>564-565
> <([a-z]+) lang="ja">.*?</\1>
でうまくいきました。

残念ながら、XMLパーサの使い方がわからない。勉強しないとなぁ…

目的は和英中が混在しているxmlから日本語の部分だけ抽出したかったので、
今回はこれで十分です。

XMLとHTMLタグが混在した形式だったんですが、何故か、HTMLタグにlang設定が
されていて途方にくれていました。

567 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 18:39:02 ]
たとえば <xxx lang="ja"><xxx>foobar</xxx></xxx> というときにちゃんと取り出せないねえ

本当にちゃんとやろうとしたら正規表現だと無理だな

568 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 12:59:56 ]
XMLは文脈自由文法だからPCREの拡張とか使わないと無理

569 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 15:34:24 ]
Perlなら再帰的なやつもイケる
ちゃんとチェックしとらんが

local our@A;
my$a="jjj<unko>an<unko>hoge</unko>gf</unko>";
local our$b=qr{(.*?(<unko>(??{$b})</unko>)(?{push@A,$2}))*.*?};

$a=~$b;

print join($/,@A),$/;


570 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 13:53:47 ]
正規表現のライブラリを自作してるのですが参考になるサイトはないでしょうか。
容易な拡張性を確保するためにオブジェクト指向を使って実装してます。

例えば
inputstr[k] == pattern[k] ?

ではなくて
pattern.can_eat(inputstr[k])

のようなpatternをレシーバ(インスタンス)としたかんじです。
現在はグループの中にグループがあるとどうやって解決するか悩んでいます。
(ab(cd|ef)gh)

などで、一応JAVAで実験してます。

571 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 13:59:04 ]
pattern.can_eat(inputstr[k]) ?
pattern.contains(inputstr[k]) ?

などでboolean関数です。
性能は速いかどうかではなく、コンパクト・コードサイズ小さいなど目指しています(機能拡張はオブジェクト指向と同じくプラグインしますんで)。
構文木を作るとかではなく容易にスクラッチから書ける程度のコードサイズで、かつ動的に実行時に機能追加できると言うのが条件で作っています。

572 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 14:04:39 ]
他の言語の正規表現APIは参考にしてる?
OOならJava, Ruby, Python, .NETとあると思うけど

573 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:14:50 ]
あれ?反応ないですね。
オブジェクト指向を使った実装だと構文木を使ったものよりもだいぶ簡単になる(見通しがよくなる)んですけど・・・
多少コード量(というかクラス・ファイル数)は多くなるんですけど、やっぱりインタプリタは旧来式の構文木を使った実装しかやらないんでしょうか。



574 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:28:45 ]
何をしたいのかが伝わってないんだろう。
読んで、正規表現ライブラリを利用者に見せるためのAPIの話ではないの
かも、という印象は持ったが、それ以上は考えるが面倒くさいのでス
ルー。


575 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 02:07:17 ]
もっぱら使う側が多いからじゃないのかな。特に不満もないし。。
鬼車のポジションを奪える可能性もあるからがんばって!

576 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 02:37:56 ]
参考になるサイトもないでどうやって頑張るんだよ!
3日ぐらい悩んで大体めどがたってきたから別にいいけど。

577 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 07:29:45 ]
要するにこういうことだろ。
いずれにしても、パターンの構文木()笑を作る必要はあるよ

/(ab(cd|ef)gh)/.match("xabefgh")
 /ab(cd|ef)gh/.match("xabefgh")
  /ab/.match("xabefgh")
  /(cd|ef)gh/.match("efgh")
  /(cd|ef)gh/.match("efgh")
   /(cd|ef)gh/.match("efgh")

578 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 07:29:58 ]
途中で書き込んでしもた。めんどくせ

579 名前:デフォルトの名無しさん [2009/01/22(木) 11:45:20 ]
●正規表現の使用環境
prel

●検索か置換か?
置換

●説明
特定タグ間のHTMLタグを全て削除する
(<body>から</body>までのタグを全て削除)

●対象データ
<html>
<body>
テスト<BR>
<b>です。</b>
</body>
</html>


●希望する結果
<html>
<body>
テスト
です。
</body>
</html>

580 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 13:41:18 ]
>>579
$html =~ s{(?<=<body>).+(?=</body>)} {
  (my $body = $&) =~ s/<.+?>//gs;
  $body;
}es;

581 名前:デフォルトの名無しさん [2009/01/22(木) 14:08:55 ]
>>579 のおかげで prel でぐぐっても perl が検索対象になることを知った

582 名前:581 mailto:sage [2009/01/22(木) 14:11:05 ]
ごめん、正確には
prel 正規表現
など prel と何か別のキーワードでぐぐったとき prel は perl とみなされるっぽい

583 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 16:40:10 ]
ワロタ



584 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 10:40:12 ]
余談になるけど、VBSの正規表現は、処理系の実務にも耐えられるくらいの機能は持ってるよ。
条件判定としての正規表現を使える事は、VBAユーザーにとってこれ以上無いほどのメリットだと思ってる。

俺もそんなに正規表現は詳しくはないけど、エクセルで使う目的を考えると、VBSの正規表現は非常に使い勝手が良い。
良くも悪くもシンプルなんだよね。

仕事で文字列操作やRDBみたいな使い方してる人ならば、絶対に覚えておいて損はないよ。
後方参照が表現できるようになって、世界が開けました。
どうでも良い話かもしれないけど、マジでお勧め。

585 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 10:40:37 ]
誤爆しました。すいません。

586 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:36:14 ]
文字列の中から名前を取り出したいのですがどうやって書けば良いでしょうか

587 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 00:08:31 ]
「名前」の定義は?
環境も。

588 名前:586 mailto:sage [2009/01/28(水) 00:46:35 ]
名前は人名です
環境はVB.NETです。


589 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 00:51:34 ]
人名の定義は?

590 名前:デフォルトの名無しさん [2009/01/28(水) 00:56:14 ]
それを聞いてる

591 名前:479 mailto:sage [2009/01/28(水) 03:07:22 ]
形態素解析の領分だろうね。
どこまで固有人名を解析できるかは性能と元の文章次第だけど。

592 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 03:07:56 ]
すまん、名前消したつもりが残ってた

593 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 06:56:44 ]
辞書も必要だな



594 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 10:19:24 ]
形態素解析までしなくても、日本全国の苗字と名前のテーブルを作って
「苗字+名前」で引っこ抜けばいいと思う

595 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 10:37:13 ]
「あや」と「あやの」みたいのをどう
扱うかとか考え出すとなにげに難しい

596 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 11:34:07 ]
英語と違って日本語は「わかち書き」をしないから難しいやろね。

597 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 18:51:36 ]
(鈴木|佐藤|山田| ... )\s*(太郎|花子| ... )

598 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 19:16:08 ]
>>586よ、別に煽って遊んでる訳じゃないぞ。
コンピュータにとって、言うは易いが行うは難しい要求なんだ。

599 名前:586 mailto:sage [2009/01/29(木) 01:12:20 ]
レスありがとう
では郵便番号か都|道|府|県|市|区|町|村のある行から
5行以内にある行で、末尾に。や、のない7文字以内の行で
その行の中には、も。もない文字列
これを抜き取ったら名前の可能性が高そうなのですが
どうやって書けば良いでしょうか

600 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 01:52:27 ]
>>599
それは非常に喜ばしいけれど、名前じゃないものが抽出されたり、名前が抽出されなかった時に
どうするか考えてるの?
そのデータをどうやって作ってるのかよくわからんが、ごちゃごちゃしたテキストしか存在しないの?

601 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 01:57:10 ]
人名で7文字制限つけていいのかなぁ。外国人名なんか来た日にゃえらいことになりそうだが。

602 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 09:57:27 ]
>>599
正規表現ってのは、
人間が生活しながら身に付ける区別みたいに複雑な物じゃなく、
字面だけで機械的に振り分けする物。
それが可能なデータでないなら、正規表現での抽出は諦めた方がいい。
既存のデータなら仕方ないけど、何等かの方法で生成してる物なら、
その上流で手を打たないと難しい。

603 名前:586 mailto:sage [2009/01/29(木) 22:51:11 ]
レスどうもです
たくさんのデータを一気に処理をするという感じではないので
失敗したら手動で訂正するので大丈夫です。
ちょっと補助的に便利になればという感じで
100件やったら半分でも正常に抽出できればそれでもOKです。
今↓のように書いてみましたがこれだと

123-0001
東京都**区**町10-10
日本太郎
03-0000-0000

東京都**区**町10-10
03-0000-0000
日本太郎
123-0001

上の2つは大丈夫なのですが、

日本太郎
123-0001
東京都**区**町10-10
03-0000-0000

だと抽出できなかったのですが、どこを訂正したらいいでしょうか?

r = New Regex("((\d\d\d\-?\d\d\d\d|都|道|府|県)+?.+\n)*?(.*\n{1,5}?)(?<1>.{4,8})$\n.+?(\d\d\d\-?\d\d\d\d|都|道|府|県)*?\n?", _
RegexOptions.Multiline Or RegexOptions.IgnoreCase)

よろしくお願いします。




604 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:15:33 ]
うざいので他所言ってください

605 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:33:20 ]
>>603
パターンが一定ではないので無理。

606 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:35:34 ]
とりあえず、「住所は必ず数字で終わる」のなら、
^(\D+)\d
で引っ掛けられそうか。

607 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:36:39 ]
>>603
人名なんて住所より短いんだから、行頭から全角6文字以内+行末文字の抽出で十分じゃない。
はい終了。

608 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:43:23 ]
まあそれでも半分ぐらいは抽出できそうだわな

609 名前:586 mailto:sage [2009/01/30(金) 00:02:42 ]
こんにちは
とかが頭にある場合があるので郵便番号と都道府県のチェックは外せないです。

610 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:07:35 ]
ネタじゃないの?

611 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:10:28 ]
データごとの固まりは空行で区切られてたり
行数が決まってたりすんの?
それだったら名前候補を抽出するプログラムも結構簡単に作れそうだが
全部正規表現でやるのは逆にむずそう

612 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:13:59 ]
>>609
そのレベルになってくると、正規表現よりそれを扱うスクリプトの方でどうにかしたほうがいいのでは

そもそもどういう形式のデータかも想像できないし

613 名前:586 mailto:sage [2009/01/30(金) 00:16:01 ]
ネタじゃないです

データは一つはj一人のデータです。
複数の人の切り分けは考慮する必要なないです。
やっぱ難しいですかね



614 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:25:56 ]
>>613
いやもう本気で「日本語でおk」
どんなデータか説明してもらわないと、どうもこうも無いわ。

615 名前:586 mailto:sage [2009/01/30(金) 00:44:15 ]
わかりにくくてすみません。
自由なフォーマットで送られてくる住所氏名電話番号を
ListViewに登録するということをやっています。
文章は

こんにちは
私の住所は
123-0001
東京都**区**町10-10
日本太郎
03-0000-0000
です
お返事ください。

こんな感じの文章から名前を出来るだけ高確率で取り出したいです。
段階に分けて調べた方がいいですかね
上の例だとまず郵便番号と都道府県と電話番号の位置を正規表現で探して
それらに一番近い7文字の全角句読点なしを取るという感じでどうでしょうか
「です」が怪しいですね「になります」とか書いてあったら間違うし・・・









[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<194KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef