你如何找到一个带有 string.contains 的分隔/隔离子字符串?



我正在尝试从列表中的字符串中解析和识别一些值。

我正在使用string.Contains来识别我正在寻找的值,但即使该值被其他文本包围,我也会收到命中。如何确保只有在值被隔离的情况下才会命中?

示例解析:

寻找价值 = "302"

string sale = 
  "199708. (30), italiano, delim fabricata modella, serialNumber302. tnr F18529302E.";
var result = sale.ToLower().Contains(”302”));

在这个例子中,我将得到"serialNumber302""F18529302E"的命中,这在上下文中是不正确的,因为我只想要在发现"302"孤立时才命中,例如"dontfind302 应该找到 302"。

关于如何做到这一点的任何想法?

如果您尝试正则表达式,则可以使用 b 定义单词边界:

string sale = 
  "199708. (30), italiano, delim fabricata modella, serialNumber302. tnr F18529302E.";
bool result = Regex.IsMatch(sale, @"b302b"); // false
sale = "A string with 302 isolated";
result = Regex.IsMatch(sale, @"b302b"); // true

因此,只有当 302 位于字符串的开头、字符串的末尾,或者被非单词字符包围时,即不是 a-z A-Z 0-9 或 _

编辑:从评论中我意识到不清楚"serialNum302"是否应该受到打击。我在这个答案中是这样假设的。

我看到一些简单的方法可以做到这一点:

1(如果输入始终是示例中的数字,则一种选择是仅搜索未被更多数字包围的子字符串,方法是检查初始搜索的所有结果并将其相邻字符与字符串"0123456789"进行比较。不过,我真的不认为这是最好的选择,因为当它误解其他数据之一时

,迟早会中断。

2( 如果字符串销售始终具有"serialNumber[Num]"格式的 seriäl 编号,而不是只查找 Num,而是查找"序列号"+ Num,因为这不太可能与其他数据混淆。

3(从您的字符串来看,您似乎有一个标准化的格式,该格式被引入系统。在这种情况下,以标准化的方式解析它,例如,在逗号处将其拆分为子字符串,然后根据需要以不同的方式解析每个子字符串。

最新更新