正則表達式查找可選字符我的文本字符串可能類似於下面的 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")
我可以使用函數這個詞來拯救自己:
word(1,ParamLst2 = RegexMatch(Str2, "(ParamList:)(.*)")[3],";");
這對 Str1 和 Str2 都有效,但是增加了複雜性,如果我能更好地掌握正則表達式,我確信這是不必要的!
有任何想法嗎 ?
腳本回复:正則表達式查找可選字符或者,使用正則表達式
Str1 = "ParamList:Param1,Param2,Param3";
Str2 = "ParamList:Param1,Param2,Param3;Var2;Var3";
regex(Str2, "^([^:]*):([^;]*);?(.*)$", "part1='\1' part2='\2' part3='\3'" )
</CODE></P><P><STRONG>part1='ParamList' part2='Param1,Param2,Param3' part3=''</STRONG></P><P><STRONG>或者</STRONG></P><P><STRONG>part1='ParamList' part2='Param1,Param2,Param3' part3='Var2;Var3'</STRONG></P><P>開頭的 ^ 和結尾的 $ 強制正則表達式從頭到尾匹配。 [^:] 匹配不是 : 的字符,[^;] 匹配不是 ; 的字符。 . 孤獨的 : 超過了要求的 : 和 ;?是可選的; ..* 匹配其餘字符(如果有)。</P><P>父母組成捕獲組。 這些組在第三個參數中稱為 \1、\2 和 \3,並插入到生成結果的字符串中。</P><P>請注意,所有 * 運算符都已編寫,因此它們永遠不會“走得太遠”並且需要備份。 這使匹配變得高效。 如果可以將所有內容匹配到定界符,請使用否定字符類。</P><P>結果字符串可以是 "\2" 如果這就是你想要的。</P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-335077" slang="en-US" mode="NONE">回复:正則表達式查找可選字符</LINGO-SUB><LINGO-BODY id="lingo-body-335077" slang="en-US" mode="NONE"><P>這是使用 JSL 的字符串函數的簡單暴力破解方法。</P>
<PRE><CODE class=" language-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"};