IF语句中通配符使用问题:过滤CAD图层列表
图层过滤代码修正方案
原代码的问题在于直接用!= "*LT*"进行字符串比较,这种写法不会解析通配符,无法匹配到以-LT、-LT1等结尾的图层。以下是两种可行的修正方案:
方案一:使用正则表达式(推荐)
通过正则匹配所有以-LT或-LT加数字结尾的图层名称,同时忽略大小写:
首先需要引入命名空间:
using System.Text.RegularExpressions;
修改过滤条件:
if ((ltr.Name != "0") && (ltr.Name.ToUpper() != "DEFPOINTS") && !Regex.IsMatch(ltr.Name, @"-LT\d*$", RegexOptions.IgnoreCase)) { AllLayerList.Add(ltr.Name); }
- 正则表达式
-LT\d*$说明:-LT:匹配字符串中的-LT片段\d*:匹配0个或多个数字$:限定匹配位置在字符串结尾RegexOptions.IgnoreCase:兼容-lt、-Lt等大小写混合的写法
方案二:纯字符串操作判断
如果不想使用正则,可以通过字符串索引和字符判断实现:
string layerName = ltr.Name; bool needExclude = false; int ltPos = layerName.IndexOf("-LT", StringComparison.OrdinalIgnoreCase); if (ltPos != -1) { // 情况1:图层名称正好以-LT结尾 if (ltPos == layerName.Length - 3) needExclude = true; // 情况2:-LT后面跟数字(比如-LT1、-LT23) else if (ltPos <= layerName.Length - 4 && char.IsDigit(layerName[ltPos + 3])) needExclude = true; } if ((layerName != "0") && (layerName.ToUpper() != "DEFPOINTS") && !needExclude) { AllLayerList.Add(layerName); }
内容的提问来源于stack exchange,提问作者CJ_
相关产品推荐
相关产品推荐

