1

我将这项任务作为更大潜艇的一部分来完成,以大幅减少不同团队的工作量。

我正在尝试读取字符串并使用正则表达式用单个空格(或另一个字符)替换一对多空格。目前我使用的是本地字符串,但是在主子中,此数据将来自外部 .txt 文件。此 .txt 中元素之间的空格数可能因行而异。

我正在使用下面的代码,并用破折号替换空格。我在下面的代码上尝试了不同的变体和不同的逻辑,但总是在“c = re.Replace(s,replacement)”行上得到“运行时错误'91':对象变量或时钟变量未设置”

使用断点后,我发现我的正则表达式(re)是空的,但我不太清楚如何从这里开始。如何用破折号替换我的空格?我已经解决这个问题几个小时了,大部分时间都花在谷歌上,看看是否有人遇到过类似的问题。

Sub testWC()

Dim s As String
Dim c As String
Dim re As RegExp

s = "hello      World"

Dim pattern As String
pattern = "\s+"
Dim replacement As String
replacement = "-"

c = re.Replace(s, replacement)
Debug.Print (c)

End Sub

额外信息:使用 Excel 2010。已成功链接我的所有参考资料(Microsoft VBScript 正则表达式 5.5”。我成功地能够使用香草“替换”功能替换空格,但是由于元素之间的空格数量不同,我无法用它来解决我的问题。

Ed:我的 .txt 文件也不是固定的,有许多不同长度的行,所以我也无法在 excel 中使用 MID 函数来剖析字符串

请帮忙

谢谢,

JH

4

2 回答 2

1

您没有RegExp正确设置对象。

Dim pattern As String
pattern = "\s+" ' pattern is just a local string, not bound to the RegExp object!

你需要这样做:

Dim re As RegExp
Set re = New RegExp
re.Pattern = "\s+"    ' Now the pattern is bound to the RegExp object
re.Global = True      ' Assuming you want to replace *all* matches

s = "hello      World"
Dim replacement As String
replacement = "-"

c = re.Replace(s, replacement)
于 2013-05-30T15:37:51.387 回答
0

尝试在 Regex 对象中设置模式。现在,re只是一个没有分配真正模式的正则表达式。re.Pattern = pattern初始化pattern字符串后尝试添加。

您初始化了模式,但实际上并没有将它挂接到正则表达式中。当你最终调用replace它时,它不知道它在寻找什么模式,并抛出了错误。

也尝试将 设置reNew RegExp.

Sub testWC()

Dim s As String
Dim c As String
Dim re As RegExp
Set re = New RegExp

s = "hello      World"

Dim pattern As String
pattern = "\s+"
re.Pattern = pattern
Dim replacement As String
replacement = "-"

c = re.Replace(s, replacement)
Debug.Print (c)

End Sub
于 2013-05-30T15:39:14.030 回答