オプションの文字を見つける正規表現以下の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の両方で機能しますが、正規表現をもう少しよく把握できれば不要だと確信している複雑さを追加しています。
何か案は ?
スクリプティングRe:オプションの文字を見つける正規表現これは、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"};Re:オプションの文字を見つける正規表現または、正規表現を使用します
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」にすることができます。