我想删除“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)
答案 0 :(得分:5)
正则表达式可以解决问题:
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正确指出:
如果您想删除号码后面的空格,请将表达式更改为“H \ d +”。
如果您只想在每行开头匹配/替换它,请将其更改为“^ 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来对源代码执行高级查找/替换,这是单独的,几乎值得花时间学习它。