我使用readline方法读了一个文本文件。
var txtfile = File.readlines([Filepath])
.where(s => s.startswith(" U:"));
选择任何一封信都有诀窍吗?像这样的Pseudocode
s.startswith(" *:");
那是因为我的驱动器名称不断变化。请注意,它必须是确切的字母顺序。谢谢!
您可以使用以下正则表达式。
.Where(s => Regex.Match(s,@"^\s.{1}:.*").Success);
以下是该正则表达式的简短说明。
^
- 线的开始
qazxsw poi - 空白空间
\s
- 任何一个角色的恰好一次出现
.{1}
- 匹配分号
:
- 0个或更多字符
这个怎么样?如果第一行的字符是空格(),第三个字符是冒号(:)。然后两者之间可以有任何角色。
.*
正如评论中指出的那样,上述并非100%完成。这是一个更完整的代码行:
s[0] == ' ' && s[2] == ':'
此代码添加了.where(s => s.Length >= 3 && s[0] == ' ' && s[2] == ':');
条件,确保字符串中至少有3个字符。如果您尝试访问不存在的索引处的字符,您将获得s.Length >= 3
。
这是满足您的要求的最高性能条件。可以在查询中进行其他优化,但这总是比Regex快得多。在另一个答案中,这也与正则表达式100%相当,但速度要快得多。
IndexOutOfRangeException
例如:
s.Substring(2, 1) == ":"
你可以使用VB的" e:".Substring(2, 1) == ":" // will return true
。如果您使用的是.NET Core,则需要安装Like operator。如果您使用的是.NET Framework,则需要引用Microsoft.VisualBasic.dll。
Microsoft.VisualBasic package