[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 12/18 04:56 / Filesize : 6 KB / Number-of Response : 24
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

Regular Expression(正規表現) Part12



1 名前:デフォルトの名無しさん [2013/12/17(火) 14:19:52.00 ]
Regular Expressionスレです。

質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。

前スレ
Regular Expression(正規表現) Part11
toro.2ch.net/test/read.cgi/tech/1362913813/


天ぷら等2以降

14 名前:デフォルトの名無しさん [2013/12/17(火) 22:41:19.96 ]
●Regular Expressionの使用環境
Perl

●検索か置換か?
検索

●説明
ミドルネームを含む名前も、ミドルネームを含まない名前も分解して抽出したい
また、名前の区切りはスペースやドットなど色々なものに対応したい

●対象データ
Edward Snowden
Edward.Joseph.Snowden
エドワード・スノーデン
エドワード=ジョセフ=スノーデン

●希望する結果
(値を入れているわけではなく、$1〜$3に入っていて欲しいものです)
$1 = "Edward"   $2 = ""   $3 = "Snowden"
$1 = "Edward"   $2 = "Joseph"   $3 = "Snowden"
$1 = "エドワード"   $2 = ""   $3 = "スノーデン"
$1 = "エドワード"   $2 = "ジョセフ"   $3 = "スノーデン"

15 名前:デフォルトの名無しさん mailto:sage [2013/12/17(火) 23:59:19.63 ]
>>14
Part11スレへどうぞ

16 名前:デフォルトの名無しさん [2013/12/18(水) 00:11:20.15 ]
>>14
どうしても$1〜$3に入ってなきゃダメかね?

my $fname;
my $mname;
my $lname;

if ( $buf =~/([a-zA-Z]*)[\s\.・==]([a-zA-Z]*)[\s\.・==]*([a-zA-Z]*)/ ){
  $fname = $1;
  if (length($3)==0){
    $lname = $2;
  }else{
    $mname = $2;
    $lname = $3;
  }
}

17 名前:デフォルトの名無しさん mailto:sage [2013/12/18(水) 00:13:22.40 ]
>>14
先ずは正規化して、どれかのルールに置き換えた方がいいと思う。

18 名前:デフォルトの名無しさん mailto:sage [2013/12/18(水) 00:22:55.22 ]
>>16
日本語は?

19 名前:デフォルトの名無しさん mailto:sage [2013/12/18(水) 00:45:13.94 ]
sub namechk{
$buf=shift; #引数として名前を受け取る
if ($buf=~/(.+)(\s|\.|=|・)(.+)(\s|\.|=|・)(.+)/){
return ($1,$3,$5);
}elsif ($buf=~/(.+)(\s|\.|=|・)(.+)/){
return ($1,"",$3);
}
}
こっちのほうがいい。

20 名前:デフォルトの名無しさん [2013/12/18(水) 00:58:54.76 ]
正規化しろ

21 名前:デフォルトの名無しさん [2013/12/18(水) 01:01:51.51 ]
正規化しろ

22 名前:デフォルトの名無しさん mailto:sage [2013/12/18(水) 01:12:12.27 ]
正規表現縛りな奴って何考えて生きてんの?



23 名前:デフォルトの名無しさん mailto:sage [2013/12/18(水) 01:42:16.31 ]
正規化したら1行余計なものが増えるじゃん
sub namechk{
 $buf = shift;
 $buf =~s/(\s|\.|=|=|・)/"."/meg;
 if ( $buf =~/(.+)\.(.+)\.(.+)/ ){
  return ( $1 , $2 , $3 );
 }elsif ( $buf =~/(.+)\.(.+)/ ){
  return ( $1 , "" , $2 );
 }
}






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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