单元格公式的正则表达式以排除单位

时间:2018-02-16 13:02:47

标签: regex excel-vba vba excel

我想从我的字符串中删除一些文本,只留下数字(公式)

示例

=(3平方米* 3M)* 2 / 10worker

我们的想法是编写正则表达式,只留下文本和运算符,如“*”或“/”,但删除字符串中所有已定义的单位,如“m2”或“m3”(立方米)或“worker”。我需要这个在excel中编写公式,然后有可能知道公式

中特定数字的含义

我的公式如下:

Function xxx(cell As String, _
        Optional ByVal IsGlobal As Boolean = True, _
        Optional ByVal IsCaseSensitive As Boolean = True) As Variant

    'Declaring the object
    Dim objRegExp As Object

    'Initializing an Instance
    Set objRegExp = CreateObject("vbscript.regexp")

    'Setting the Properties
    objRegExp.Global = IsGlobal
    objRegExp.Pattern = "[a-zA-Z^0-9_,-]"
    objRegExp.IgnoreCase = Not IsCaseSensitive

    'Execute the Replace Method
    xxx = Evaluate(objRegExp.Replace(cell, ""))
End Function 

我想知道如何为我的目的编写正则表达式。

1 个答案:

答案 0 :(得分:2)

您可以使用

objRegExp.Pattern = "m\d\b|(\d*[,.]?\d+)|[^0-9.*/()+-]+" 

然后

objRegExp.Replace(cell, "$1")

请参阅regex demo。要确保将逗号分析为小数分隔符,请将其替换为.(您可以使用s = Replace(s, ",", "."))。

模式详情

  • m\d\b - m后跟数字和字边界
  • | - 或
  • (\d*[,.]?\d+) - 第1组(引用$1):任意0位数,可选,.
  • | - 或
  • [^0-9.*/()+-]+ - 除了数字以外的1个或多个字符,./()+和{{1 }}。也许您想在此处添加-,在,
  • 之后添加。{/ 1}