注意:在我发布问题之前,
我收到一个建议,该链接可以回答我的问题,我已经检查过它,但它没有。
因为我们的数据库系统上有多个用户输入值(稍后导出到 Excel 电子表格中)。
因此,用户每次手动输入的乘法模式都会不同。
示例 1: “3 x2”
示例 2: “4x 8”
示例 3: “6 x 10”
您会注意到,“X”字符和每次不同位置的数字之间可能有一个空格。
因为我对正则表达式的专业知识还处于初级阶段,所以
我创建了三个函数来处理上面的每个示例,并且它们分别正常工作。
但是,我寻求将这些功能合并为一个功能(如果可能的话)以便于使用。
预先,非常感谢您的帮助。
当前值 | 预期结果 |
---|---|
最后进行 3 x2 注射 | 最后 3x2 注射 |
最后 4x 8 注射 | 最后 4x8 注射 |
最后 6 x 10 次注射 | 最后 6x10 注射 |
Function Remove_Space_between_Digit_X(ByVal str As String) As String
Static reg As New RegExp
reg.Global = True
reg.IgnoreCase = True
reg.Pattern = "(\s[0-9]+)(\s)(x)"
Remove_Space_between_Digit_X = re.Replace(str, "$1$3")
End Function
Function Remove_Space_between_X_Digit(ByVal str As String) As String
Static reg As New RegExp
reg.Global = True
reg.IgnoreCase = True
reg.Pattern = "(x)(\s)([0-9]+)(\s)"
Remove_Space_between_X_Digit = reg.Replace(str, "$1$3$4")
End Function
Function Remove_Space_around_X_Digit(ByVal str As String) As String
Static reg As New RegExp
reg.Global = True
reg.IgnoreCase = True
reg.Pattern = "([0-9])+(\s)(x)(\s)([0-9]+)(\s)"
Remove_Space_around_X_Digit = reg.Replace(str, "$1$3$5$6")
End Function
您可以使用这个正则表达式:
这将匹配:
(\d)
:一个数字(在第 1 组中捕获)\s*x\s*
:x
被一些空格包围(\d)
:一个数字(在第 2 组中捕获)并将其替换为
$1x$2
以删除字符串中的所有空格。regex101演示
在VBA中:
笔记
为了简单起见,正则表达式并没有尽可能严格;它也会匹配类似的东西
a4 x 3b
。如果这可能是一个问题,请改为使用:它使用分词并匹配多个数字以确保它只匹配数字的乘法。
regex101上的正则表达式演示
4 * 5
或者2 + 4
。在第二个选项中,您需要aKey
根据需要进行修改。x
是两个数字之间的唯一运算符,则无需 RegExp 即可完成。如果我理解正确的话,你想要取:
任何两个数字,只有一个“x”,并且“x”周围有零个或多个空格
...并将其转换为:
原始的两个数字,它们之间有一个明确的“x”。
此正则表达式匹配您提供的所有情况,以及类似“7x23”(根本没有空格)的内容。
意义:
替换正则表达式模式很简单:
意义:
根据您的示例代码,我认为您的替换字符串将是:
——克洛德