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

时间:2014-07-25 09:49:46

标签: c# string contains

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

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

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

当我找到P1并且str不包含P1但是P10时,我的问题出现了,它返回true,这是合乎逻辑的,但不是我需要的。

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

感谢您的帮助

6 个答案:

答案 0 :(得分:3)

您可以将字符串拆分为数组,然后像这样检查

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

答案 1 :(得分:2)

如果您还需要检查P10,请按相反顺序进行检查,这意味着您需要在P10之前选择P1

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

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

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

通常,如果遇到这个问题,那么它的数据结构选择很差。字符串并不是事物的集合,而是您在此处尝试建模的内容。

答案 2 :(得分:1)

为什么不拆分字符串并检查:

string input = "P1|P2|P3|P10";

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

bool containsP1 = split.Contains("P1"); // true

答案 3 :(得分:0)

str.Split('|').Contains("P1");

答案 4 :(得分:0)

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

例如:

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

答案 5 :(得分:0)

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

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