我有一个文本文件,我正在尝试使用vbscript进行处理,它看起来像这样:
111 , , ,Yes ,Yes
222 , , ,Yes ,Yes
333 , , ,Yes ,Yes
444 , , ,Yes ,Yes
555 , , ,Yes ,Yes
666 , , ,Yes ,Yes
我想要的是删除回车符和制表符,逗号和'是'(或正则表达式“\ t,\ t,\ t \ t \ t \ t,是\ t,是”)以提供此输出:
( '111', '222', '333', '444', '555', '666')
我正在使用此代码:
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(filePath, ForReading)
strText = objFile.ReadAll
objFile.Close
'chr(010) = line feed chr(013) = carriage return
strNewText = Replace(strText, "\t,\t,\t\t,Yes\t,Yes" & chr(013) & chr(010), "','")
Set objFile = objFSO.OpenTextFile(filePath, ForWriting)
objFile.WriteLine strNewText
objFile.Close
这不是给出了所需的输出,但是,如果我取“”\ t,\ t,\ t \ t,是\ t,是“&”超出替换它删除回车,这是好的,但我也需要删除逗号选项卡和'是',以及在结束时有一个('开头和')。我猜这是我使用正则表达式的方式,但我没有使用太多的vbscript所以我不确定
答案 0 :(得分:1)
而不是追捕你不想要的东西,而是专注于你想要的东西更容易,更少犯错误:
Dim sExp : sExp = "('111','222','333','444','555','666')"
Dim aLines : aLines = Array( _
"111 , , ,Yes ,Yes" _
, "222 , , ,Yes ,Yes" _
, "333 , , ,Yes ,Yes" _
, "444 , , ,Yes ,Yes" _
, "555 , , ,Yes ,Yes" _
, "666 , , ,Yes ,Yes" _
)
Dim sAll : sAll = Join( aLines, vbCrLf )
WScript.Echo sAll
Dim reCut : Set reCut = New RegExp
reCut.Global = True
reCut.MultiLine = True
reCut.Pattern = "^\d+"
Dim oMTS : Set oMTS = reCut.Execute( sAll )
If 0 = oMTS.Count Then
WScript.Echo "Bingo A!"
Else
ReDim aNums( oMTS.Count - 1 )
Dim nI
For nI = 0 To UBound( aNums )
aNums( nI ) = oMTS( nI ).Value
Next
Dim sRes : sRes = "('" & Join( aNums, "','" ) & "')"
If sRes = sExp Then
WScript.Echo "QED:", sRes
Else
WScript.Echo "Bingo B!"
End If
End If
输出:
111 , , ,Yes ,Yes
222 , , ,Yes ,Yes
333 , , ,Yes ,Yes
444 , , ,Yes ,Yes
555 , , ,Yes ,Yes
666 , , ,Yes ,Yes
QED: ('111','222','333','444','555','666')
注解:
我使用数组来构建我要处理的字符串( sAll )。你的字符串( strText ) 来自一个文件。所以:
Dim sAll : sAll = Join( aLines, vbCrLf )
==>
Dim sAll : sAll = objFile.ReadAll
字符串由RegExp(reCut)解析,其模式 ^ \ d + 看起来 对于行的开头( ^ )的数字( \ )的序列( + )(不是 整个弦;这就是MultiLine属性设置为True的原因。 .Execute的结果是匹配集合(oMTS),包含匹配。
为了使预期结果的连接更容易, 匹配的值被复制到一个数组(aNums)。
"('" & Join( aNums, "','" ) & "')"
表达式组合了数组
元素使用分隔符(组合器?)',' - 来完成结果,
我们只需要一个合适的头(' resp.s尾')。
答案 1 :(得分:0)
试试这个
(.*?)(?:\s*,){3}Yes\s*,Yes\r?
你需要处理换行符,Regexr \r
没问题。我将换行符放入正则表达式中,因为之后我想使用?
选择它。否则,如果最后一行没有以换行符结束,则不会替换它。
并将其替换为
'$1',
在这里,您将在最后获得一个额外的逗号。我目前还不确定如何处理这个问题。
$1
是第一个捕获组的内容,在您的情况下,第一个捕获组之前的部分应该在其中。