首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数VBA前后可能字符的正则区间

数VBA前后可能字符的正则区间
EN

Stack Overflow用户
提问于 2015-10-26 11:03:32
回答 2查看 940关注 0票数 2

我正在尝试生成一个正则表达式,该表达式可以在VBA中的字符串中识别一个间隔内的数字。有时这个数字在它周围有字符,其他时候没有(来自供应商的不一致符号)。表达式应该识别以下三个示例中的1413在数字范围500-2000 (或者不是在数字范围0-50或51-499)。

示例:

  • Test 12/2014. Tot.flow:1413 m3
  • Test 12/2014. Tot.flow:1413m3
  • Test 12/2014. Tot.flow: 1413

这些字符串有一些标识符:

  • 在数字之前总是有一个冒号。
  • 在冒号和数字之间可能有一个空白。
  • 在数字和m3之间可能有一个空白。
  • m3不一定总是存在,如果没有,则数字位于字符串的末尾。

到目前为止,我尝试做一个查找数字范围的正则表达式是([5-9][0-9][0-9]|[1]\d{3}|2000),但是这也匹配所有三个数字(2001年给出了一个匹配的200)。然而,我知道我错过了几个实现最终目标的概念。我想我的问题如下:

  1. 如何在不为零的情况下开始间隔(发现很多问题都是从零开始的)
  2. 如何考虑flow:m3符号的变化

我只想检查一下号码是否在号码范围内。这是我的疯狂,所有的帮助都非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-28 09:11:44

您可以使用以下正则表达式使用regExp.Replace()提取数字:

代码语言:javascript
复制
^.*:\s*(\d+).*$

更换部分是$1

然后,使用通常的数字比较来检查该值是否在预期范围内(例如,If CLng(result) > 499 And If CLng(result) < 2001 Then ...)。

测试宏:

Dim re为RegExp,tgt为字符串,src为字符串。

代码语言:javascript
复制
Set re = New RegExp
With re
  .pattern = "^.*:\s*(\d+).*$"
  .Global = False
End With
src = "Test 12/2014. Tot.flow: 1413"
tgt = re.Replace(src, "$1")
MsgBox (CLng(tgt) > 499 And CLng(tgt) < 2001)
票数 3
EN

Stack Overflow用户

发布于 2015-10-26 11:44:47

你可以尝试:

代码语言:javascript
复制
:\s?([5-9]\d\d|1\d{3}|2000)\s?(m3|\n)

而且,在我看来,regex ([5-9][0-9][0-9]|[1]\d{3}|2000)是可以的,它不应该与数字>500和2000<匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33344122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档