C#如果行以“*:”开头,如何选择任何字符

问题描述 投票:0回答:4

我使用readline方法读了一个文本文件。

var txtfile = File.readlines([Filepath])
.where(s => s.startswith(" U:"));

选择任何一封信都有诀窍吗?像这样的Pseudocode

s.startswith(" *:");

那是因为我的驱动器名称不断变化。请注意,它必须是确切的字母顺序。谢谢!

c# readlines system.io.file
4个回答
2
投票

您可以使用以下正则表达式。

.Where(s => Regex.Match(s,@"^\s.{1}:.*").Success);

以下是该正则表达式的简短说明。

^ - 线的开始

qazxsw poi - 空白空间

\s - 任何一个角色的恰好一次出现

.{1} - 匹配分号

: - 0个或更多字符


2
投票

这个怎么样?如果第一行的字符是空格(),第三个字符是冒号(:)。然后两者之间可以有任何角色。

.*

正如评论中指出的那样,上述并非100%完成。这是一个更完整的代码行:

s[0] == ' ' && s[2] == ':'

此代码添加了.where(s => s.Length >= 3 && s[0] == ' ' && s[2] == ':'); 条件,确保字符串中至少有3个字符。如果您尝试访问不存在的索引处的字符,您将获得s.Length >= 3


Performance

这是满足您的要求的最高性能条件。可以在查询中进行其他优化,但这总是比Regex快得多。在另一个答案中,这也与正则表达式100%相当,但速度要快得多。


0
投票
IndexOutOfRangeException

例如:

s.Substring(2, 1) == ":"

0
投票

你可以使用VB的" e:".Substring(2, 1) == ":" // will return true 。如果您使用的是.NET Core,则需要安装Like operator。如果您使用的是.NET Framework,则需要引用Microsoft.VisualBasic.dll。

Microsoft.VisualBasic package
© www.soinside.com 2019 - 2024. All rights reserved.