如何使用正则表达式提取特定模式之间的字符串?
你好,
我是正则表达式新手,我需要从用户的 ID 中提取用户名,例如:
我有以下长字符串
123450_丹; 154396_凯利; 198756_dev;
结果需要是:dan
我需要使用什么正则表达式才能提取 ID 为 123450 的 dan 名称?
提前致谢。
回复:如何使用正则表达式提取特定模式之间的字符串?谢谢,工作完美!
回复:如何使用正则表达式提取特定模式之间的字符串?谢谢,工作完美。
回复:如何使用正则表达式提取特定模式之间的字符串?请改用此表格:
name = Regex( string, "123450_([a-zA-Z ]+);", "\1" );
回复:如何使用正则表达式提取特定模式之间的字符串?我之前使用 JMP 函数提供的脚本不需要任何修改。用于捕获下划线后的一个或多个“名称”的正则表达式为(\w+\s*)+这意味着积累( )至少一个词\w+ , 零个或多个空格\s*尾随的加号表示重复该模式一次或多次。
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"; */
回复:如何使用正则表达式提取特定模式之间的字符串?嗨马克,
只是 1 个问题,如果我的用户名中有空格,我需要添加什么:
例如:“123450_dan Fox;154396_kelli;198756_dev;”
我尝试了以下正则表达式:
字符串=“123450_dan 狐狸;154396_kelli;198756_dev;”
名称 = Regex( 字符串, "123450_(\w+ | \s+)", "\1" );
显示(名称);
结果:“dan”而不是“dan Fox”
提前致谢。
回复:如何使用正则表达式提取特定模式之间的字符串?只是为了好玩,并且因为正则表达式可能很难被其他人(或两周后)阅读,这里有一个替代方案,使用 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
回复:如何使用正则表达式提取特定模式之间的字符串?谢谢马克,
工作完美!回复:如何使用正则表达式提取特定模式之间的字符串?假设您希望名称与模式“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 );
回复:如何使用正则表达式提取特定模式之间的字符串?您没有指定有关 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 );