如果行以“*:”开头,C# 如何 select 任何字符
C# How to select any character if line starts with " *:"
我已经使用 readline 方法读取了一个文本文件。
var txtfile = File.readlines([Filepath])
.where(s => s.startswith(" U:"));
选择任意字母有技巧吗?
类似这样的伪代码
s.startswith(" *:");
那是因为我的驱动器名称不断变化。
请注意,它必须是字母的确切顺序。
谢谢!
这个怎么样?如果行的第一个字符是 space ( ),第三个字符是冒号 (:)。然后中间可以有任何字符。
s[0] == ' ' && s[2] == ':'
正如评论中指出的那样,以上内容并未 100% 完成。这是更完整的一行代码:
.where(s => s.Length >= 3 && s[0] == ' ' && s[2] == ':');
此代码添加了 s.Length >= 3
条件以确保字符串中至少有 3 个字符。如果您尝试访问不存在索引处的字符,您将得到 IndexOutOfRangeException
.
性能
这是为了满足您的要求的最佳性能条件。可以对查询进行额外的优化,但这总是比 Regex 快得多。这也 100% 等同于其他答案中的正则表达式,但速度要快得多。
您可以使用下面的正则表达式。
.Where(s => Regex.Match(s,@"^\s.{1}:.*").Success);
下面是对该正则表达式的简短解释。
^
- 行首
\s
- 空格
.{1}
- 任意字符恰好出现一次
:
- 匹配分号
.*
- 0 个或更多字符
s.Substring(2, 1) == ":"
例如:
" e:".Substring(2, 1) == ":" // will return true
您可以使用 VB 的 Like operator. If you're using .NET Core, you need to install Microsoft.VisualBasic package。如果您使用的是 .NET Framework,则需要引用 Microsoft.VisualBasic.dll.
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
.Where(s => LikeOperator.LikeString(s, " [A-Z]:*", CompareMethod.Text))
我已经使用 readline 方法读取了一个文本文件。
var txtfile = File.readlines([Filepath])
.where(s => s.startswith(" U:"));
选择任意字母有技巧吗? 类似这样的伪代码
s.startswith(" *:");
那是因为我的驱动器名称不断变化。 请注意,它必须是字母的确切顺序。 谢谢!
这个怎么样?如果行的第一个字符是 space ( ),第三个字符是冒号 (:)。然后中间可以有任何字符。
s[0] == ' ' && s[2] == ':'
正如评论中指出的那样,以上内容并未 100% 完成。这是更完整的一行代码:
.where(s => s.Length >= 3 && s[0] == ' ' && s[2] == ':');
此代码添加了 s.Length >= 3
条件以确保字符串中至少有 3 个字符。如果您尝试访问不存在索引处的字符,您将得到 IndexOutOfRangeException
.
性能
这是为了满足您的要求的最佳性能条件。可以对查询进行额外的优化,但这总是比 Regex 快得多。这也 100% 等同于其他答案中的正则表达式,但速度要快得多。
您可以使用下面的正则表达式。
.Where(s => Regex.Match(s,@"^\s.{1}:.*").Success);
下面是对该正则表达式的简短解释。
^
- 行首
\s
- 空格
.{1}
- 任意字符恰好出现一次
:
- 匹配分号
.*
- 0 个或更多字符
s.Substring(2, 1) == ":"
例如:
" e:".Substring(2, 1) == ":" // will return true
您可以使用 VB 的 Like operator. If you're using .NET Core, you need to install Microsoft.VisualBasic package。如果您使用的是 .NET Framework,则需要引用 Microsoft.VisualBasic.dll.
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
.Where(s => LikeOperator.LikeString(s, " [A-Z]:*", CompareMethod.Text))