excel - Excel VBA 正则表达式模式中的定界符,过滤某些内容但不过滤其他内容

标签 excel regex vba

我编写了 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/

相关文章:

arrays - ReDim 上的 2D 数组下标超出范围

Excel 'put random value in a cell and run permutation "最简单的问题

excel - 从 "-"左侧提取文本,但忽略不包含 "-"的单元格

javascript - 有什么比我的测试门牌号码的模式更好的正则表达式/正则表达式?

excel - 区分 "1"和 "11"

excel - 如果两张表的值匹配,则添加新表

Java8 String ReplaceAll 改变了行为

python - 我正在尝试使用(?(ID/NAME)...)找出正则表达式

调用函数的 Excel 单元格

vba - Excel 2007 vba 宏 : error 9 subscript out of range