全部,
尝试更好地探索正则表达式。 我可以通过一个简单的 Contains() 来实现我想要的东西 - 但尝试看看使用正则表达式会得到什么等价物。
我的正则表达式没有按照我期望的方式工作,有人可以向我指出等效的正则表达式并解释我出错的地方吗?
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
dt:city[2] = "aLBUQUERQUE";
CityList = dt:City << Get Values;
Des = list();
for(i = 1 , i <= N Items(CityList),i++,
If(!IsMissing(Regex(Char(CityList[i]),"^a|A[LB]*")),
Insert Into(Des,CityList[i]);
);
);
/*for(i = 1 , i <= N Items(CityList) , i++,
If(Contains(CityList[i],"aLB")|Contains(CityList[i],"ALB"),
Insert Into(Des,CityList[i]);
);
);*/
Show(Des);
//Close All(Data Tables,"No Save");现在你正在匹配任何一个字符串开头的 'a' ('^a')或者“A”后跟零个或多个字母“L”或“B”(“A[LB]*”)。一些注意事项:
- 左右两边没有括号,因此匹配的是“|”之前或之后的整个字符串。因此,如果字符串以“a”开头,则表示已完成并且不会匹配其他任何内容。
- 方括号表示匹配其中的任何字符。
- 星号表示匹配零个或多个前面的字符或组,在本例中表示方括号内的组。
- 一起, or 的右侧将匹配字符串中任何位置的任何一个(不仅仅是在开头):
- A
- AL
- AB
- 白蛋白
- ABL
- 全部LLLLLLLLBBBBBLLBLLB
- 字符串 aA 实际上是 Regex 函数的两个不同匹配项。
您可能想要这个:“^(a|A)LB.*$”,或者这个:“^[aA]LB.*$”
- 从字符串的开头开始,匹配 a 或 A,后跟
- 字符 LB 按顺序排列,后跟
- 零个或多个任意字符,句点为任意字符 (.*),后跟
- 字符串的末尾。这可能是没有必要的。
Des = {"ALBANY", "aLBUQUERQUE"};
查看regexr.com ,它不仅有助于检查您的代码,而且在左侧有很好的“参考”和“备忘单”部分。我几乎总是打开多行(右上角的标志)。
编辑以澄清匹配可以位于字符串内的任何位置。