我对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
有人能指出我正确的方向吗?提前谢谢!
答案 0 :(得分:2)
"[*]"
是一个匹配*
文字字符的字符类。
您可以使用
\[[^\]]*]$
或
\[.*?]$
请参阅regex demo。如果您还需要在[...]
之前匹配可选空格,请在模式开始时添加\s*
。
<强>解释强>
\[
- 文字[
符号[^\]]*
- 除]
以外的零个或多个符号(如果没有[
和]
,请将此替换为[^\][]*
)
.*?
- 0 +除换行之外的任何字符尽可能少到第一个... ]
- 位于... ]
符号
$
- 字符串结尾 \[[^\]]*]$
和\[.*?]$
之间的区别在于,前者还会匹配[
和]
之间的换行符(如果有的话)和\[.*?]$
赢了吨。
答案 1 :(得分:0)
假设您还希望在“持续”之后摆脱空间,您可能希望搜索: “\ [。* \] $”
这会查找空格,左括号,任意数量的字符,右括号和字符串结尾。
如果右括号不是字符串的结尾,例如:
测试字符串 [删除[此]及继续]
它将与。*保持匹配,直到找到\] $($为字符串的结尾。)
Wiktor的例子很好,但是 “\ [[^ \]] *] $”坏了 - 我认为他的意思是“\ [[^ \]] * \] $” - 这个问题是它会停在第一个右括号,所以我上面给出的例子将无法匹配
他的第二个例子,“\ [。*?] $”,也应该是“\ [。+ \] $”,假设您希望确保括号内有某些内容,而这似乎是他想要的。
(?查找0或1,+查找1或更多,*查找0或更多)
(更优雅地使用“\ [。* \] $”,因为这不会做出这样的假设。“。*”匹配任何字符的0或更多。由\ [和\]包围,它会找到任何内容一对括号,以$结尾,确保它在字符串的末尾。)
希望这对某人有所帮助 - 我在回复之前注意到了日期,但看到了破坏的正则表达式。网站使用*并隐藏单个\标记的方式,它可能是Wiktor的例子,直到他发布它们...(实际上很可能。)