我试图使用正则表达式从文本文件中删除整行(包括断行)。
这是我的代码:
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
不起作用,每次我尝试运行脚本时都不会删除任何内容(因为搜索没有找到任何内容)。还试图用括号和括号封装表达式,但没有运气。
有关于此的任何提示吗?
答案 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来执行此操作。对于大型输入文件,将有一个性能优势。