如何使用正则表达式匹配前面没有“=”的单词?

时间:2013-04-10 06:42:23

标签: ruby regex lookbehind

我想从Ruby中的Fortran代码中提取符号。符号将具有以下模式(注意:变量类型和属性部分已被过滤掉):

a = b, c(2)       ! Match result should be "a" and "c"
d(3) = [1,2, &    ! Match result should be "d"
  3]

我尝试过的正则表达式是((?<!=)\w+(?![^\[]*\]+)(?=( |,|\(|$))) lookaround个问题。但由于lookbehind的限制,我无法匹配“= *”来排除b

我用Rubular进行测试。为方便起见,请参阅here

提前致谢!

3 个答案:

答案 0 :(得分:2)

为了让你的正则表达式工作,你可以先=

之后替换所有尾随空格
.gsub(/=\s+/, '=').scan(/((?<!=)\w+(?![^\[]*\]+)(?=( |,|\(|$)))/)

答案 1 :(得分:0)

你可以做的一件容易的事就是将行分成两行(在'='处)并且只在左操作数上执行你的正则表达式。

这样你就不必编写任何复杂的正则表达式。

答案 2 :(得分:0)

我的建议是将你的正则表达式分成2个表达式。正则表达式不一定总是单行。