正则表达式查找可选字符我的文本字符串看起来像下面的Str1和Str2:
Str1 = "ParamList:Param1,Param2,Param3";
Str2 = "ParamList:Param1,Param2,Param3;Var2;Var3";
因此,以逗号分隔的值列表以关键字和冒号为前缀。 以逗号分隔的列表可能会或可能不会跟随其他变量。 如果是这样,逗号分隔的列表和后续变量将用分号分隔,如Str2中所示。
我想获取逗号分隔的列表。 我已经尝试了以下正则表达式
ParamLst1 = RegexMatch(Str2, "(ParamList:)(.*);?")[3];
ParamLst2 = RegexMatch(Str2, "(ParamList:)(.*);?")[3];
我在想它将找到“ ParamList:”,然后(。*)贪心将所有内容匹配到字符串的末尾,但将备份直到找到零或一个分号。
我一定在想错,因为使用Str2,我将所有内容都返回到字符串的末尾(“ Param1,Param2,Param3; Var2; Var3”)
我可以使用单词function来帮助自己摆脱困境:
word(1,ParamLst2 = RegexMatch(Str2, "(ParamList:)(.*)")[3],";");
这对Str1和Str2均适用,但会增加复杂性,如果可以更好地掌握正则表达式,我确信这是不必要的!
有任何想法吗 ?
脚本编写回复:正则表达式查找可选字符这是使用JSL的字符串函数的一种简单的蛮力方法。
Str1 = "ParamList:Param1,Param2,Param3";
Str2 = "ParamList:Param1,Param2,Param3;Var2;Var3";
s1 = substr(str1, 11);
w1 = words(s1, ";");
plist1 = words(w1[1], ",");
s2 = substr(str2, 11);
w2 = words(s2, ";");
plist2 = words(w2[1], ",");<BR />show(plist1, plist2);
输出:
plist1 = {"Param1", "Param2", "Param3"};
plist2 = {"Param1", "Param2", "Param3"};回复:正则表达式查找可选字符或者,使用正则表达式
Str1 = "ParamList:Param1,Param2,Param3";
Str2 = "ParamList:Param1,Param2,Param3;Var2;Var3";
regex(Str2, "^([^:]*):([^;]*);?(.*)$", "part1='\1' part2='\2' part3='\3'" )
part1 ='ParamList'part2 ='Param1,Param2,Param3'part3 =''
要么
part1 ='ParamList'part2 ='Param1,Param2,Param3'part3 ='Var2; Var3'
开头的^和结尾的$强制正则表达式从头到尾匹配。 [^:]匹配不是:的字符,而[^;]匹配不是;的字符。 。 孤独者:超越了必要的:和;?是可选的; 。。*匹配其余字符(如果有)。
家长将捕获组。 这些组在第3个参数中分别称为\ 1,\ 2和\ 3,并插入产生结果的字符串中。
请注意,所有的*运算符都是写成的,因此它们永远不会“过分”并且需要备份。 这使得匹配有效。 当可以将所有内容匹配到一个定界符时,请使用负字符类。
如果仅此而已,结果字符串可以是“ \ 2”。