使用正则表达式拆分文本文件内容以进行分隔符?

时间:2012-03-30 10:03:20

标签: regex arrays vbscript split

我有一个包含区域转移和结果的文本文件。需要阅读每一行&将其拆分为数组以输出服务器名称列表& IP地址。但是我在分割数据方面遇到了一些问题,因为我在空白分隔符上的尝试似乎并没有按照我想要的方式进行。

示例输入:

machine1.fqdn.com. 86400    IN A    192.168.1.10 
machine2.fqdn.com. 86400    IN A    192.168.1.11 
machine3.fqdn.com. 86400    IN A    192.168.1.12 
machine4.fqdn.com. 86400    IN A    192.168.1.13

脚本:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("I:\testHarvestIF.txt", ForReading)

Const ForReading = 1

Do Until objFile.AtEndOfStream
strNextLine = objFile.Readline
arrServiceList = Split(strNextLine," ",-1,1)
Wscript.Echo "Server name: " & arrServiceList(0) & vbCrLF & _ 
  " - IP Address: " & arrServiceList(2)
Loop

objFile.Close

当前输出:

Server name: machine1.fqdn.com.
IP Address: IN A    192.168.1.10
Server name: machine2.fqdn.com.
IP Address: IN A    192.168.1.11
Server name: machine3.fqdn.com.
IP Address: IN A    192.168.1.12
Server name: machine4.fqdn.com. 
IP Address: IN A    192.168.1.13

期望的输出:

Server name: machine1.fqdn.com.
IP Address: 192.168.1.10
Server name: machine2.fqdn.com.
IP Address: 192.168.1.11
Server name: machine3.fqdn.com.
IP Address: 192.168.1.12
Server name: machine4.fqdn.com.
IP Address: 192.168.1.13

有什么方法可以使用常规表达式来使用任意长度的空格作为分隔符? E.g。

arrServiceList = Split(strNextLine,"^\s+",-1,1)

提前感谢您提供的任何帮助。

此致

RB

2 个答案:

答案 0 :(得分:0)

这可能不起作用,具体取决于数据的格式,但在调用Split之前,您可以尝试使用单个空格字符替换额外的空格:

Dim re : Set re = New RegExp
re.Global = True
re.Pattern = "\s+"

Do Until objFile.AtEndOfStream
strNextLine = re.Replace(objFile.Readline, " ")
arrServiceList = Split(strNextLine," ",-1,1)
Wscript.Echo "Server name: " & arrServiceList(0) & vbCrLF & _ 
  " - IP Address: " & arrServiceList(4)
Loop

答案 1 :(得分:-1)

使用RegExp对象(MSDN)匹配所需的字符串,而不是拆分字符串:

    set regex = new RegExp
    regexp.pattern = "^.*? "
    set serverName = regex.execute(inputText).value
    regex.pattern = " .*?$"
    set ipAddress = regex.execute(inputText).value