【问题标题】:VB.NET - Substring function that stops reading at first integer, possible?VB.NET - 在第一个整数处停止读取的子字符串函数,可能吗?
【发布时间】:2015-05-12 23:05:47
【问题描述】:

我目前有一个包含 500 多行路径的文本文件。 (即 N:\Fork\Cli\Scripts\ABC01.VB)

其中一些文件名的长度不同(即 ABC01.VB、ABCDEF123.VB 等) 如何使用子字符串函数删除路径名、数字和文件类型,只留下字母。

例如,处理 N:\Fork\Cli\Scripts\ABC01.VB,并返回 ABC。 或 N:\Fork\Cli\Scripts\ZUBDK22039.VB 并返回 ZUBDK。

我只能使用此代码检索前 3 个字母

Dim comp As String = sLine.Substring(28, 3)
    sw.WriteLine(comp)

【问题讨论】:

  • 一个字符串永远不会只包含整数文本。您可以使用System.IO.Path.GetFileNameWithoutExtension() 将其缩减为仅名称,然后根据需要去掉数字
  • 在您的示例中,数字始终位于文件名的末尾。如果路径类似于 N:\Fork\Cli\Scripts\AB42Cde01.VB,你想做什么?
  • @Blackwood,路径总是字母后跟数字,它永远不会偏离那个特定的布局。

标签: vb.net function substring


【解决方案1】:

正如 Plutonix 指出的那样,将文件名与路径隔离的最佳方法是使用 System.IO.Path.GetFileNameWithoutExtension

您可以像这样从文件名中提取字母(不是数字或其他字符):

Dim myPath As String = "N:\Fork\Cli\Scripts\AB42Cde01.VB"

Dim filename As String = System.IO.Path.GetFileNameWithoutExtension(myPath)
Dim letters As String = filename.Where(Function(c) Char.IsLetter(c)).ToArray

以上代码将letters设置为ABCde。

代码依赖于字符串被视为字符数组这一事实。 Where 方法处理字符串(数组)中的所有字符并仅选择字母(使用 Char.IsLetter 方法)。选定的字符将转换为分配给letters 变量的数组(字符串)。

我从您的最新评论中看到,数字不可能与字母混合(如我的示例所示)。但是,该代码在您的情况下应该仍然有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2017-01-19
    相关资源
    最近更新 更多