缺乏外观的解决方法?

时间:2015-01-22 14:29:17

标签: regex vba vbscript

要回答another user's question我将下面的正则表达式拼凑在一起以匹配字符串中的数字。

\b[+-]?[0-9]+(\.[0-9]+)?\b

在提供我的答案之后,我注意到,由于\ b匹配句点字符,因为在其中存在多个具有多个句点的数字序列的情况下我得到了不需要的匹配。例如,"2.3.4"会返回匹配"2.3""4"

负面的前瞻和外观可以帮助我,给我一个像这样的正则表达式:

\b(?<!\.)[+-]?[0-9]+(\.[0-9]+)?\b(?!\.)

...除了因为某些未知原因VBScript Regex(以及扩展VBA)不支持lookbehind。

是否有一些解决方法可以让我确认比赛开始时的单词边界不是不包括在比赛中的时间段?

1 个答案:

答案 0 :(得分:3)

也许你不需要看一眼。如果您能够提取特定的捕获组而不是整个匹配,那么您可以使用:

(?:[^.]|^)\b([+-]?([0-9]+(\.[0-9]+)))\b(?!\.)

将匹配:

2.5      
54.5
+3.45
-0.5

不匹配:

1.2.3
3.6.
.3.5
  • 捕获组1将输出整数并签名
  • 捕获组2将输出整数
  • 捕获组3将输出分数(如原始表达式中的捕获组1)