检查string是否严格包含字符串

本文关键字:包含 字符串 string 是否 检查 | 更新日期: 2023-09-27 18:14:52

我有一个字符串看起来像这样:str = P1|P2|P3....

我需要检查字符串是否包含实例P1。我这样做:

if (str.Contains("P1"))
{...}

我的问题来了,当我寻找P1和str不包含P1,但P10,它返回true,这是合乎逻辑的,但不是我需要的。

如果字符串中有P10,如何严格检查P1而不返回true ?

谢谢你的帮助

检查string是否严格包含字符串

你可以将字符串分割成数组,然后像这样检查

bool bFound = str.split('|').Contains("p1")

如果您也需要检查P10,则按相反顺序进行检查,这意味着您将在P1之前拾取P10

如果每个Psomething后面跟着一个|,你可以检查P1|。如果它是一个分隔符,并且不会出现在字符串的最后,那么这将不起作用。

一个正则表达式将是另一个解决方案:

Regex.IsMatch(str, "P1(?!'d)") // Matches P1 if not followed by another digit

一般来说,如果你遇到这个问题,这是一个糟糕的数据结构选择。字符串不完全是东西的集合这就是你要建模的

为什么不拆分字符串并检查一下呢?

string input = "P1|P2|P3|P10";
string[] split = input.Split('|'); // { "P1", "P2", "P3", "P10" }
bool containsP1 = split.Contains("P1"); // true
str.Split('|').Contains("P1");

可能是使用正则表达式的好例子,因为您需要确保您正在查找的字符串由管道或字符串的末尾分隔。

例如:

string input = "P1|P2|P3|P10";
string pattern = @"P1('||$)";
Regex.IsMatch(input, pattern);

您必须检查您正在查找的字符串是否后跟'|'或位于您检查的字符串的末尾。

String str = "P1|P3|P20";
String strToFind = "P2";
System.Text.RegularExpressions.Regex.IsMatch(str, strToFind+@"('||'Z)");