正则表达式来区分平等

时间:2011-01-12 08:09:40

标签: python regex equality

有没有人在学习更高级的正则表达式方面有一些很好的资源

我一直遇到问题,我想确保某些内容没有用引号括起来

即。我试图创建一个表达式,它将匹配包含相等的python文件中的行,即

a = 4

这很容易,但我无法设计一个表达式,能够将多个术语或包含在引号中的术语分开:

a, b = b, a
a,b = "You say yes, ", "i say no"

3 个答案:

答案 0 :(得分:4)

使用正则表达式解析代码通常不是一个好主意,因为编程语言的语法不是常规语言。我不是一个python程序员,但我认为用python模块解析python代码要好得多,例如this onethis one

答案 1 :(得分:1)

认为您必须将表达式标记为正确评估,但您可以使用以下正则表达式检测模式

r'\s+(\w+)(\s*,\s*\w+)*\s*=\s*(.*?)(\s*,\s*.*?)*'

如果组(2)和组(4)不为空,则必须对表达式进行标记化

请注意,如果您有

a,b = f(b,a),g(a,b)

很难分析

答案 2 :(得分:1)

Python有一个很棒的Language Reference,其中还包含descriptions of the lexical analysis and syntax

在您的情况下,两个语句都是assignments,左侧是list of targets,右侧是list of expressions

但是由于该语法部分的一部分是无上下文而不是常规的,所以你不能使用正则表达式(除非它们支持某种递归模式)。因此,最好使用正确的解析器as Jonas H suggested