Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 查找每个出现的X并插入回车符_Vb.net - Fatal编程技术网

Vb.net 查找每个出现的X并插入回车符

Vb.net 查找每个出现的X并插入回车符,vb.net,Vb.net,同事将一些数据放入平面文件(.txt),需要在每次出现“POL01”、“SUB01”、“VEH01”、“MCO01”之前插入回车符 我确实使用了: For Each line1 As String In System.IO.File.ReadAllLines(BodyFileLoc) If line1.Contains("POL01") Or line1.Contains("SUB01") Or line1.Contains("VEH01") Or line1.Conta

同事将一些数据放入平面文件(.txt),需要在每次出现“POL01”、“SUB01”、“VEH01”、“MCO01”之前插入回车符

我确实使用了:

For Each line1 As String In System.IO.File.ReadAllLines(BodyFileLoc)
            If line1.Contains("POL01") Or line1.Contains("SUB01") Or line1.Contains("VEH01") Or line1.Contains("MCO01") Then
                Writer.WriteLine(Environment.NewLine & line1)
            Else
                Writer.WriteLine(line1)
            End If
        Next
但不幸的是,SSI并没有将文件格式化为“行”,而是将其作为一个完整的字符串

如何在每次发生上述情况之前插入回车

测试文本

POL01CALT302276F              332                 NBPM          00101                 20151113201511130001201611132359                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2015111300010020151113000100SUB01CALT302276F              332                 NBPMP01            Akl            Abi-Khalil                                            19670131   M                                                                                                                             U33 Stoford Close                                                                                    SW19 6TJ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2015111300010020151113000100VEH01CALT302276F              332                 NBPM001LV56 LEJ                        N 2006VAUXHALL                                                                            CA                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       2015111300010020151113000100MCO01CALT302276F              332                 NBPM0101 0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2015111300010020151113000100POL01CALT742569N

您可以为此使用正则表达式,特别是通过使用来查找要查找的字符串的每个匹配项,并将其替换为紧跟匹配文本的换行:

Dim str as String = "xxxPOL01xxxSUB01xxxVEH01xxxMCO01xxx"
Dim output as String = Regex.Replace(str, "((?:POL|SUB|VEH|MCO)01)", Environment.NewLine + "$1")

'output contains:   
'xxx
'POL01xxx
'SUB01xxx
'VEH01xxx
'MCO01xxx
可能有更好的方法来构造此正则表达式,但这是对不同字母的简单替换,后面是
01
。此匹配文本由替换字符串中的
$1
表示

如果您不熟悉正则表达式,有许多工具可以帮助您理解它们-例如,将向您展示我在此处使用的工具的说明:


James如果SUB01 etc不在字符串的开头,请参阅上面我得到的一些测试文本。这不重要-它仍然会找到它们并将它们放在新的一行上。在我的测试代码中运行更新的示例?嗨,James,使用上面的代码,它只会突出显示我在regex101.com上第一次出现的POL01。您需要为我显示更多代码。啊-这是在regex101上,请注意,在我的原始链接上,我没有设置在该环境中成功测试所需的任何标志,您需要将
g
放在标志框中,使其成为全局搜索。使用.NET中的
Regex.Replace
,您将不需要它。设置了全局标志。我也会更新答案中的链接。注意,我只是想让这个站点作为regex解释的补充,而不是让它实际进行替换。