regex - 用于排除单位的单元格公式的正则表达式

标签 regex excel vba

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

示例

=(3m2*3m)*2/10 worker

这个想法是编写正则表达式,只留下文本和运算符,如“*”或“/”,但从字符串中删除所有定义的单位,如“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 

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

最佳答案

您可以使用

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 个或多个数字以外的字符、./(, )+-。也许你想在这里添加一个,,将其添加在0-9之后。

关于regex - 用于排除单位的单元格公式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48827406/

相关文章:

excel - 如何在窗体窗口打开时保持 VBA 中的代码运行?

excel - 打开 Excel 工作簿时出错,程序停止响应

vba - 单击单元格的 Excel 宏取消隐藏下面的行

JavaScript - 正则表达式,是否有任何字符串的标记?

regex - 在 Mechanize 函数中使用哪个正则表达式标签?

excel - 从列中获取唯一值

vba - 如何在 Access 中打开特定记录处的表单

regex - 使用 awk 匹配一个单词,然后找到另一个单词第一次出现的位置

php - 正则表达式从 UTF8 字符串中删除非字母数字字符

excel - 打印集合中的条目