正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?
こんにちは、
私は正規表現を初めて使用します。ID からユーザーの名前を抽出する必要があります。たとえば、次のようになります。
次のような長い文字列があります
123450_ダン; 154396_ケリ; 198756_dev;
結果は次のようになります: dan
ID 123450 を持つ名前 dan を抽出するにはどのような正規表現を使用する必要がありますか?
前もって感謝します。
Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?ありがとう、仕事は完璧です!!
Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?ありがとう、仕事は完璧です。
Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?代わりに次のフォームを使用してください。
name = Regex( string, "123450_([a-zA-Z ]+);", "\1" );
Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?JMP 関数を使用して以前に提供したスクリプトは、変更する必要がありません。アンダースコアの後の 1 つ以上の「名前」を取得する正規表現は次のようになります。 (\w+\s*)+つまり蓄積する( )少なくとも一言\w+ 、0個以上のスペース\s*末尾のプラスは、パターンを 1 回以上繰り返すことを意味します。
Names Default to Here(1);
string="123450_dan fox; 154396_kelli ann marie; 198756_dev;";
name1 = Regex( string, "123450_((\w+\s*)+\b)", "\1" );
name2 = Regex( string, "154396_((\w+\s*)+\b)", "\1" );
Show( name1, name2 ); <BR />/*: name1 = "dan fox"; name2 = "kelli ann marie"; */
Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?ハイマーク、
1 つ質問があります。ユーザー名にスペースがある場合、何を追加する必要がありますか:
例: "123450_ダン フォックス; 154396_ケリ; 198756_dev;"
次の正規表現を試しました。
string="123450_ダンキツネ; 154396_ケリ; 198756_dev;"
name = Regex( string, "123450_(\w+ | \s+)", "\1" );
Show( 名前 );
結果: 「ダン フォックス」ではなく「ダン」
前もって感謝します。
Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?正規表現は他の人 (または 2 週間後) が読みにくい場合があるため、楽しみのために、JMP 関数を使用した代替案を示します。
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
//create a list of id_name
id = Words(string, ";");
//create a list if ids, a list if names, an associative array(keyed list)
idlist={};
namelist={};
lookup = [=>""]; //Associative Array that retuns an empty string, if number is not valid
for(i=1, i<=nitems(id), i++,
InsertInto(idlist, num(word(1,Trim(id[i]),"_")) );
InsertInto(namelist, Titlecase(word(2,Trim(id[i]),"_")) ); //don't need TitleCase
lookup[idlist[i]]=namelist[i] //ids are the keys and names are the values
);
show(id, idlist, namelist, lookup, lookup[198756], lookup[128954]); //last one is not valid
Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?ありがとうマーク、
完璧に動作します!!Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?パートン「id_name;」の特定の ID に名前を関連付けたいと仮定すると、このバージョンでも機能します。
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
// target ID
id = "123450";
// assume specific ID
name = Regex( string, id || "_(\w+);", "\1" );
Show( name );
Re: 正規表現を使用して特定のパターン間の文字列を抽出するにはどうすればよいですか?ID についてはあまり詳細を指定しなかったので、始めるためにいくつかの例を示します。 ここでは JMP スクリプトを使用しましたが、この抽出は列式でも使用できます。
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
// assume specific ID
name = Regex( string, "123450_(\w+\b)", "\1" );
Show( name );
// assume first ID with 6 numbers
name = Regex( string, "\d{6}_(\w+\b)", "\1" );
Show( name );
// assume first ID with any number of numbers
name = Regex( string, "\d+_(\w+\b)", "\1" );
Show( name );