从文本文件中的字符串中删除数字

时间:2014-03-05 18:29:53

标签: vb.net

我想删除“H”及其后面的数字。我只想要“B”。我知道如何删除“H”但我不确定如何删除H之后的数字。“H之后的数字”可能从一位数到三位数不等。

  

H1 B
H2 B
H10 B
H11 B

我正在尝试这个。如果“H”之后的数字是单个数字,则它有效。如果“H”后面的数字超过一位数,它将无法工作。

If line.Contains("H") Then
    line = line.Remove(0, 2)
End If

' ...

Dim AllFiles As String() = IO.Directory.GetFiles("C:\test")
For Each File As String In AllFiles
    Dim newfile As New List(Of String)
    For Each line As String In System.IO.File.ReadAllLines(File)
        If line.Contains("H") Then
            line = line.Remove(0, 2)
        End If
        newfile.Add(line)

3 个答案:

答案 0 :(得分:5)

enter image description here

正则表达式可以解决问题:

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()
        Dim input = IO.File.ReadAllText("input.txt")
        Dim output = Regex.Replace(input, "H\d+", "")
        IO.File.WriteAllText("output.txt", output)
    End Sub

End Module

神奇的部分是“H \ d +”,它转换为“字母H”,后跟一个数字(“\ d”),重复至少一次。

RegularExpressions很容易习惯。但幸运的是,网上有大量的文档和示例。 Just google it:)

编辑:正如Steven Doggart正确指出:

  1. 如果您想删除号码后面的空格,请将表达式更改为“H \ d +”。

  2. 如果您只想在每行开头匹配/替换它,请将其更改为“^ H \ d +”。

答案 1 :(得分:1)

假设“H”和数字总是在行的开头,然后是一个空格,然后是“B”(以及之后你想要保留的其他内容),你可以这样做:

line = line.Substring(line.IndexOf(" "c) + 1)

答案 2 :(得分:1)

您可以使用Char.IsDigit方法遍历字符串中的字符并找到第一个非数字字符的位置,或者您可以查找第一个空格,但它会更简单(并且更灵活)使用正则表达式。例如:

Dim match As Match = Regex.Match(line, "^H\d+ (.*)")
If match.Success Then
    Dim value As String = match.Groups(1).Value
End If

这是正则表达式的the meaning

  • ^ - 匹配的字符串必须从该行的开头
  • 开始
  • H - 匹配的字符串必须以字母" H"
  • 开头
  • \d - 匹配的字符串必须包含数字(数字)字符
  • + - 将有一个或多个数字字符
  • [space] - 数字和下一个数字之间必须有空格
  • (...) - 括号创建一个组,以便在代码中我们可以只查询组中字符的值
  • . - 任何角色
  • * - 任意次数

match.Groups(1)属性返回第一个组(括号之间的部分),这是空格后面的文本的值。

不可否认,正则表达式确实具有相当高的学习曲线,但绝对值得学习。正则表达式的最大优点是它们非常灵活。例如,您可以将该正则表达式外部存储在设置或数据库中,而不是在应用程序中对该逻辑进行硬编码。然后你可以修改它而无需重新编译你的应用程序。更重要的是,您可以根据需要为应用程序的每次安装自定义它。

RegEx用于许多不同的语言,工具和技术。例如,您可以在Visual Studio中使用is来对源代码执行高级查找/替换,这是单独的,几乎值得花时间学习它。