Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式拆分VBA中的字符串_Regex_Excel_Vba_String Split - Fatal编程技术网

Regex 使用正则表达式拆分VBA中的字符串

Regex 使用正则表达式拆分VBA中的字符串,regex,excel,vba,string-split,Regex,Excel,Vba,String Split,我是VBA新手,想寻求一些关于使用正则表达式的帮助,我希望能以某种方式启发我,我做错了什么。我目前正在尝试将一个日期拆分为单独的日期、月份和年份,可能的分隔符包括“、”、“-”和“/” 这就是我目前正在做的事情。然而,在RegEx.Split函数中似乎出现了一些错误,因为它似乎会导致代码挂起而无法进一步处理 为了证实这一点,我做了一些简单的事情: MsgBox("Hi") pattern = "(/)|(,)|(-)" dateStringArray() = RegEx.Split(dateSt

我是VBA新手,想寻求一些关于使用正则表达式的帮助,我希望能以某种方式启发我,我做错了什么。我目前正在尝试将一个日期拆分为单独的日期、月份和年份,可能的分隔符包括“、”、“-”和“/”

这就是我目前正在做的事情。然而,在RegEx.Split函数中似乎出现了一些错误,因为它似乎会导致代码挂起而无法进一步处理

为了证实这一点,我做了一些简单的事情:

MsgBox("Hi")
pattern = "(/)|(,)|(-)"
dateStringArray() = RegEx.Split(dateString, pattern)
MsgBox("Bye")
“Hi”msgbox弹出,但“Bye”msgbox从未弹出,更深层的代码似乎根本没有被执行,这导致我怀疑RegEx.Split导致它被卡住

我能不能检查一下我是否真的在使用正则表达式。用正确的方法拆分?根据MSDN,Split(String,String)还返回一个字符串数组

谢谢大家!


编辑:我试图不探索CDate()函数,因为我试图不依赖用户计算机的区域设置。

引用VbScript Regexp文档中的一个示例:

要进行测试,请调用:

MsgBox(SubMatchTest("Please send mail to dragon@xyzzy.com. Thanks!"))
简言之,您需要您的模式来匹配您想要提取的各个部分,其中包括spearators,可能类似于:

"(\d+)[/-,](\d+)[/-,](\d+)"

整个过程将在oMatch中完成,而数字(\d)将在oMatch.submatch(0)到oMatch.submatch(2)中结束。

要在VBA中使用正则表达式拆分字符串,请执行以下操作:

公共函数SplitRe(文本作为字符串,模式作为字符串,可选IgnoreCase作为布尔值)作为字符串()
静态re作为对象
如果re什么都不是
Set re=CreateObject(“VBScript.RegExp”)
re.Global=True
re.MultiLine=True
如果结束
re.IgnoreCase=IgnoreCase
关于模式=模式
SplitRe=Strings.Split(re.Replace(text,ChrW(-1)),ChrW(-1))
端函数
用法示例:

Dim v
v=拆分(“a,b/c;d”、“[,;/”)

您真的需要为此使用
RegEx
CDate
是否符合要求?首先,
Split
不是正则表达式的一种方法。其次,链接的引用是VB.Net,而不是VBA。在VBA中的正则表达式和拆分函数中有很多答案。@paul由于一些复杂的原因,我试图不依赖计算机上的区域设置。但CDate如何帮助分裂它呢?@chrisneilsen噢,这不是一回事吗?请原谅我自己的困惑。我一直试图在VBA中为正则表达式拆分找到它,但是没有用,但是谢谢你,我将尝试继续搜索
datVar=CDate(“10/11/12”)
然后
年(datVar)
月(datVar)
日(datVar)
nice-如果字符串已经包含
vbNullChar
字符,则结果不好。如何返回MsgBox(v)?我得到运行时13错误。类型不匹配。什么是字符串()。这是一个返回另一个string类型函数的函数吗?
MsgBox(SubMatchTest("Please send mail to dragon@xyzzy.com. Thanks!"))
"(\d+)[/-,](\d+)[/-,](\d+)"