是否存在诸如IndexOf(任何白色字符,startIndex)这样的东西?

时间:2019-05-29 15:24:44

标签: c# regex indexof

空格字符是单个空格,制表符,返回和换行符。要检测到这些,请使用以下正则表达式:\ s

我的问题是:我是否可以使用一个IndexOf语句返回任何空白字符的索引?

//works
int index = richTextBox1.Text.IndexOf(' ', 0);
int index = richTextBox1.Text.IndexOf('\n', 0);

//doesn't work
int index = richTextBox1.Text.IndexOf('\\s', 0);
int index = richTextBox1.Text.IndexOf("\\s", 0);

'\ S'会导致一个错误,即字符过多,而“ \ s”最终只是在字符串“ \ s”中寻找“ s”。我不介意检查每种类型,但是如果有更好的方法,请告诉我。 谢谢。

1 个答案:

答案 0 :(得分:2)

string.IndexOfAny(char[])将为您提供字符串的索引,该字符串将出现在数组中任何字符的第一个字符处。

诀窍是定义什么是“空白”。下面的示例将25个字符定义为空格,更常见的字符为' ', '\n', '\t', '\v', '\r'。下面将使用unicode定义和char.IsWhitespace来确定存在哪些空白字符。

public static void Main()
{
    var wsChars = Enumerable.Range(0, ushort.MaxValue)
                            .Where(c => char.IsWhiteSpace(Convert.ToChar(c)))
                            .Select(c => Convert.ToChar(c)).ToArray();

    Console.WriteLine(wsChars.Length);

    var someText = "This_is_a\tstring with \nsome whitespace characters.";

    Console.WriteLine(someText.IndexOfAny(wsChars));
}

Try it out on .NET Fiddle

如果要从特定索引开始,只需使用string.IndexOfAny(char[], int)提供一个起始索引即可。