Regex 功能失调的基于正则表达式的vbscript,用于在.c文件的特定位置追加多行文本

Regex 功能失调的基于正则表达式的vbscript,用于在.c文件的特定位置追加多行文本,regex,vbscript,wsh,Regex,Vbscript,Wsh,我正在学习regex和vbscript,以便通过每月添加用户输入的文本,将文本附加到.c文件的新行中。我删除了肯定的lookbehind断言“?,原因之一是这段代码: If objfso.FileExists(path) Then Set objFile = objFSO.OpenTextFile(path).ReadAll End If 应该会给您一个错误,因为您正在从文件中读取字符串,但尝试使用Set关键字将其分配给变量,该关键字仅用于分配对象 如果您没有收到错误,您的代码中很可能有一

我正在学习regex和vbscript,以便通过每月添加用户输入的文本,将文本附加到.c文件的新行中。我删除了肯定的lookbehind断言“?,原因之一是这段代码:

If objfso.FileExists(path) Then
  Set objFile = objFSO.OpenTextFile(path).ReadAll
End If
应该会给您一个错误,因为您正在从文件中读取字符串,但尝试使用
Set
关键字将其分配给变量,该关键字仅用于分配对象

如果您没有收到错误,您的代码中很可能有一个“错误恢复下一步”。去掉那个

将上述代码更改为此,以便a)具有正确的赋值,b)不要使用误导性的变量名:

If objfso.FileExists(path) Then
  txt = objFSO.OpenTextFile(path).ReadAll
End If
另外,我怀疑您的正则表达式与您认为匹配的不匹配。您的输入文件似乎将换行符编码为CR-LF,因为您将换行符添加为
vbCrLf
。但是,在正则表达式中,您使用的是只匹配LF的
\n
。将其更改为
\r\n
(并删除无意义的组和断言):

然后进行如下替换:

txt = re.Replace(txt, "$1" & lptmstr & vbCrLf & "$2")
这样,新字符串就插入到最后一行和右括号之间

不要忘记将修改后的字符串写回文件:

objFSO.OpenTextFile(path, 2).Write txt

我想你应该先问问在上一篇文章中回答你的人。这里的代码不完整。请提供一份感谢您的意见。这个版本满足MVCE条件吗?这远远超出了需要。所以,您有“原始文件”(输入),您有“更新”文件,这是预期的输出,对吗
lptmstr
看起来是您根据用户输入动态构建的某个值。嗯。请尝试使用
$0替换\n
作为替换。谢谢您的更正。您能在re.Replace(txt,$1&lptmstr&vbCrLf&“$2”)中提供一些关于“$1”和“$2”的信息吗?我在很多例子中看到过类似的代码,但不理解它的用途。它们是对模式中第一组和第二组的反向引用。反向引用用于在替换中保留分组匹配。
re.Pattern = "(loss_pct_through_[a-zA-Z]{3,5}\d{4}\[[a-zA-Z_]{1,2}\d{1,2}\]\s=\s\d\.\d{14};\r\n\r\n)(\}\r\n)"
txt = re.Replace(txt, "$1" & lptmstr & vbCrLf & "$2")
objFSO.OpenTextFile(path, 2).Write txt