我编写了 VBA 函数,该函数从 Excel 中的单元格中删除分隔符之间的数字序列。我遇到的问题是,如果字符串包含分隔符“(”和“)”之间的文本,则从第一个分隔符到字符串末尾的内容将被删除。我下面的代码适用于分隔数字。
我需要更改 Regex 模式,以便如果找到分隔符内的字母或单词,则不执行任何操作,转到下一组分隔符,如果有数字,则删除分隔符和所有内容他们之间。
Function RemoveTags(ByVal Value As String) As String
Dim rx As New RegExp
With rx
.Global = True
.Pattern = "\((.*\d)\)"
End With
RemoveTags = WorksheetFunction.Trim(rx.Replace(Value, ""))
End Function
这个不错。
输入:制止拉格比的犯规学校领袖 (5,2,3,4)
输出:制止拉格比犯规的校领导
使用模式:"\((.*\d)\)"
输入:让(拉格比的)犯规学校领导(5,2,3,4)
输出:放一个
上面应该是:放一个(对拉格比的)犯规学校领导
我曾尝试在模式中添加“\W”和其他内容,但没有成功。我也一直在使用 https://regexr.com/3hmb6 的正则表达式模拟器
感谢您抽出宝贵的时间和对此提供的帮助。
最佳答案
您的代码可以使用修复
Function RemoveTags(ByVal Value As String) As String
Dim rx As New RegExp
With rx
.Global = True
.Pattern = "\s*\(\d+(?:,\d+)*\)"
End With
RemoveTags = WorksheetFunction.Trim(rx.Replace(Value, ""))
End Function
参见 regex demo .
详细信息:
\s*
- 零个或多个空格\(
- 一个(
字符\d+
- 一个或多个数字(?:,\d+)*
- 出现零次或多次,
+ 一个或多个数字序列\)
-)
字符。
如果逗号分隔的数字之间可以有空格,请使用
.Pattern = "\s*\(\d+(?:\s*,\s*\d+)*\)"
如果可以有 float :
.Pattern = "\s*\(\d+(?:\.\d+)?(?:\s*,\s*\d+(?:\.\d+)?)*\)"
关于excel - Excel VBA 正则表达式模式中的定界符,过滤某些内容但不过滤其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75087127/