아래에 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 :"를 찾은 다음 (. *) 욕심이 모든 것을 문자열의 끝까지 일치시킬 것이라고 생각하지만 0 또는 1 개의 세미콜론을 찾을 때까지 백업 할 것입니다.
Str2를 사용하면 모든 것을 문자열의 끝으로 되돌릴 수 있기 때문에 잘못 생각하고있는 것 같습니다 ( "Param1, Param2, Param3; Var2; Var3").
나는 함수라는 단어를 사용하여 자신을 구제 할 수 있습니다.
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"};