如何使用正则表达式匹配不以 "=" 开头的单词?

4

我希望能够在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上进行了测试。为了方便您,请参见这里
提前感谢!

在不支持可变长度回顾的正则表达式引擎中,无法伪造可变长度回顾。 - Tomalak
@Tomalak:是的,我对这种限制感到失望。正如“Explosion Pills”所指出的那样,我们可以先预处理字符串。 - Li Dong
Ruby 不支持的另一种有用的东西是所有格量词。 - Tomalak
3个回答

2
为了使你的正则表达式起作用,你可以先替换等号后面的所有尾随空格。
.gsub(/=\s+/, '=').scan(/((?<!=)\w+(?![^\[]*\]+)(?=( |,|\(|$)))/)

0

你可以轻松地将该行分成两部分(在“=”处),然后只对左操作数进行正则表达式匹配。

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


谢谢您的建议!但是一行中可能会有几个“=”。 - Li Dong

0

我的建议是将你的正则表达式分成两个表达式。正则表达式并不总是必须写成一行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接