正則表達式查找可選字符我的文本字符串看起來像下面的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”。