为什么这个正则表达式不能捕获算术运算符?

时间:2014-12-08 19:29:22

标签: regex vbscript expression

我正在尝试从伪编程语言脚本中捕获令牌,但未捕获+-*/等。

我试过了:

[a-z_]\w*|"([^"\r\n]+|"")*"|\d*\.?\d*|\+|\*|\/|\(|\)|&|-|=|,|!

例如我有这段代码:

for i = 1 to 10
test_123 = 3.55 + i- -10 * .5
next
msg "this is a ""string"" with quotes in it..."

在这部分代码中,正则表达式必须突出显示:  有效的变量名,  用引号括起来的字符串,  运营商如(),+ - * /!  数字如0.1 123 .5 10。

正则表达式的结果必须是:

  

作为',   '的 I ',   '的 = ',   '的 1 ',   '',   '的 10 ',   '的 test_123 ',   '的 = ',   '的 3.55 ',   '的 + '   等....

问题是如果我使用这个正则表达式,则不会选择运算符...

2 个答案:

答案 0 :(得分:0)

我们不知道您的要求,但似乎在您的正则表达式中您只捕获了一些非\ n,\ r \ n等...

尝试类似这样的事情,将要捕获的标记分组:

'([a-z_]+)|([\.\d]+)|([\+\-\*\/])|(\=)|([\(\)\[\]\{\}])|(['":,;])'

编辑:根据您在问题中写的新信息,我将正则表达式调整为新的,并使用python进行了尝试。我不知道vbscript。

import re

test_string = r'''for i = 1 to 10:
test_123 = 3.55 + i- -10 * .5
next
msg "this is a 'string' with quotes in it..."'''

patterb = r'''([\da-z_^\.]+|[\.\d]+|[\+\-\*\/]|\=|[\(\)\[\]\{\}]|[:,;]|".*[^"]"|'.*[^']')'''

print(re.findall(pattern, test_string, re.MULTILINE))

这是匹配列表:

['for', 'i', '=', '1', 'to', '10', ':', 'test_123', '=', '3.55', '+', 'i', '-', '-', '10', '*', '.5', 'next', 'msg', '"this is a \'string\' with quotes in it..."']

我认为它抓住了你所需要的一切。

答案 1 :(得分:0)

这符合我的需求我想:

"([^"]+|"")*"|[\-+*/&|!()=,]|[a-z_]\w*|(\d*\.)?\d*

但是只有空格必须留下来所以我必须找到一种方法来捕捉其他不是空格的东西,如果它不是我正则表达式中的任何其他选项。

“$%μ°”等字符会被忽略,即使我输入“|”。在我的正则表达式之后:(