VBScript RegExp对象中模式的语法是什么?

时间:2016-06-24 12:03:46

标签: regex vbscript

我对VB脚本不熟悉,并且我的regexp对象的pattern属性的语法有问题。

我有一些看起来像这样的数据:

  

前SHD行程在继续之前清除障碍[表位=   0mmFwd]前SHD行程在继续之前清除障碍[表   位置= 563mmFwd]

我想从这些记录中删除[Table Position = x]部分,所以我创建了一个小功能。虽然没有错误,但它没有像预期的那样剥离字符串的结尾,我相当确定问题是我的语法在这一行:

objRegExp.Pattern = "[*]"

以下是整个功能:

Function RemoveTablePosition(AlarmText)

'Initialise a new RegExp object
Dim objRegExp, strNewAlarmText
Set objRegExp = New Regexp

'Set the RegExp object's parameters
objRegExp.IgnoreCase = True
objRegExp.Global = True

'Look for [Table Position = xx] at the end of the code text (they always follow the same format)
objRegExp.Pattern = "[*]"

'Replace all [Table Position = xx] with the empty string to effectively remove them
strNewAlarmText = objRegExp.Replace(AlarmText, "")

'Return the new alarm text value
RemoveTablePosition = strNewAlarmText
Set objRegExp = Nothing

End Function

有人能指出我正确的方向吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

"[*]"是一个匹配*文字字符的字符类。

您可以使用

\[[^\]]*]$

\[.*?]$

请参阅regex demo。如果您还需要在[...]之前匹配可选空格,请在模式开始时添加\s*

<强>解释

  • \[ - 文字[符号
  • [^\]]* - 除]以外的零个或多个符号(如果没有[],请将此替换为[^\][]*
    OR
  • .*? - 0 +除换行之外的任何字符尽可能少到第一个...
  • ] - 位于...
  • 的文字]符号
  • $ - 字符串结尾

\[[^\]]*]$\[.*?]$之间的区别在于,前者还会匹配[]之间的换行符(如果有的话)和\[.*?]$赢了吨。

答案 1 :(得分:0)

假设您还希望在“持续”之后摆脱空间,您可能希望搜索: “\ [。* \] $”

这会查找空格,左括号,任意数量的字符,右括号和字符串结尾。

如果右括号不是字符串的结尾,例如:

测试字符串 [删除[此]及继续]

它将与。*保持匹配,直到找到\] $($为字符串的结尾。)

Wiktor的例子很好,但是 “\ [[^ \]] *] $”坏了 - 我认为他的意思是“\ [[^ \]] * \] $” - 这个问题是它会停在第一个右括号,所以我上面给出的例子将无法匹配

他的第二个例子,“\ [。*?] $”,也应该是“\ [。+ \] $”,假设您希望确保括号内有某些内容,而这似乎是他想要的。
(?查找0或1,+查找1或更多,*查找0或更多)

(更优雅地使用“\ [。* \] $”,因为这不会做出这样的假设。“。*”匹配任何字符的0或更多。由\ [和\]包围,它会找到任何内容一对括号,以$结尾,确保它在字符串的末尾。)

希望这对某人有所帮助 - 我在回复之前注意到了日期,但看到了破坏的正则表达式。网站使用*并隐藏单个\标记的方式,它可能是Wiktor的例子,直到他发布它们...(实际上很可能。)