我想根据一个正则表达式将一个字符串拆分成一个数组,这个正则表达式类似于PHP中的 preg_split 或VBScript 拆分功能但使用正则表达式代替分隔符。
使用VBScript Regexp对象,我可以执行一个正则表达式但它返回匹配(所以我得到了我的分离器的集合......这不是我想要的)
有办法吗?
谢谢
答案 0 :(得分:4)
如果您可以保留一个特殊的分隔符字符串,即您可以选择的字符串,它永远不会成为真实输入字符串的一部分(可能类似于"#@#"
),那么您可以使用正则表达式替换来替换所有字符串您的模式与"#@#"
匹配,然后在"#@#"
上拆分。
另一种可能性是使用捕获组。如果您的分隔符正则表达式是\d+
,那么您搜索(.*?)\d+
,然后提取每个匹配中捕获的组(see before和after on rubular.com)。
答案 1 :(得分:0)
您总是可以使用返回的匹配数组作为split
函数的输入。您使用第一个匹配分割原始字符串 - 字符串的第一部分是第一个分割,然后分割字符串的剩余部分(减去第一部分和第一个匹配)...继续直到完成。
答案 2 :(得分:0)
我写这个是供我使用。可能就是你要找的东西。
StringBuilder fileString = new StringBuilder();
String line = "";
char readChar;
BufferedReader br;
try {
br = new BufferedReader(new FileReader(inputFile));
while((line=br.readLine())!=null)
{
fileString.append(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(fileString.toString());
答案 3 :(得分:0)
我认为您可以通过使用Execute匹配所需的分隔符字符串,但将所有先前的字符(在先前的匹配之后)捕获为一个组来实现。这是一些可以满足您需求的代码。
'// Function splits a string on matches
'// against a given string
Function SplitText(strInput,sFind)
Dim ArrOut()
'// Don't do anything if no string to be found
If len(sFind) = 0 then
redim ArrOut(0)
ArrOut(0) = strInput
SplitText = ArrOut
Exit Function
end If
'// Define regexp
Dim re
Set re = New RegExp
'// Pattern to be found - i.e. the given
'// match or the end of the string, preceded
'// by any number of characters
re.Pattern="(.*?)(?:" & sFind & "|$)"
re.IgnoreCase = True
re.Global = True
'// find all the matches >> match collection
Dim oMatches: Set oMatches = re.Execute( strInput )
'// Prepare to process
Dim oMatch
Dim ix
Dim iMax
'// Initialize the output array
iMax = oMatches.Count - 1
redim arrOut( iMax)
'// Process each match
For ix = 0 to iMax
'// get the match
Set oMatch = oMatches(ix)
'// Get the captured string that precedes the match
arrOut( ix ) = oMatch.SubMatches(0)
Next
Set re = nothing
'// Check if the last entry was empty - this
'// removes one entry if the string ended on a match
if arrOut(iMax) = "" then Redim Preserve ArrOut(iMax-1)
'// Return the processed output
SplitText = arrOut
End Function