无法使用正则表达式删除VBS中的整行

时间:2016-11-30 17:08:35

标签: regex vbscript

我试图使用正则表达式从文本文件中删除整行(包括断行)。

这是我的代码:

Do Until objFileToRead1.AtEndOfStream
    nline = objFileToRead1.ReadLine()
    regEx.Pattern = ".*to "
    nline = regEx.Replace(nline, "")
    objFileToRead2.WriteLine nline
Loop

这很好,按预期工作。 所以,如果我的文本文件包含:

hahahaha to 
hehehehe to hihihihi
hohohoho to

变成:

(blank line)
hehehehe to hihihihi
(blank line)`

然而,我并不想要这样的空白。我已经尝试使用regEx.Pattern = ".*to \r\n",但似乎正则表达式中的\r\n不起作用,每次我尝试运行脚本时都不会删除任何内容(因为搜索没有找到任何内容)。还试图用括号和括号封装表达式,但没有运气。

有关于此的任何提示吗?

2 个答案:

答案 0 :(得分:3)

nline = objFileToRead1.ReadLine()

nline不包含尾随的vbCrLf resp。 \ r \ n,因此您的新RegExp无法匹配。

如果你只希望在"到"之后只有一些有趣的行,只有.WriteLine到输出文件只有 nline匹配"到\ S + $" (在此之前,一个空白,一个或多个非空格)。 I.E。:忘掉替换。

答案 1 :(得分:3)

ReadLine读取流中的下一行。结果不包含换行符,因此正则表达式不匹配\r\n

要防止输出中出现空行,请在WriteLine为空时调用nline。或者,在您的情况下,只有在与正则表达式模式不匹配时才将行写入输出。

以下是我要做的事情:

Set regEx = New RegExp
regEx.Pattern = "to \S+"

Do Until objFileToRead1.AtEndOfStream
    line = objFileToRead1.ReadLine
    If Not regEx.Test(line) Then objFileToRead2.WriteLine line
Loop

补充说明:

  • 不需要在循环中重新定义正则表达式模式。
  • 由于您似乎在寻找固定字符串,因此可能没有必要使用正则表达式。您可以使用InStr() function来执行此操作。对于大型输入文件,将有一个性能优势。