我有以下代码:
import re
pattern = r'.className\s*\+?=\s*.*?\+?[\'"](.*?)["\']'
code_str = "if (El.className == 'blue' ) {\nEl.className = 'className20';\n}\n"
re.findall(pattern, code_str)
输出>>> ['blue', 'className20']
我只想要输出['className20']
。
[更新]
它还需要处理some_str
与className20
结合的连接情况。它应该仍然只返回['className20']
。
code_str2 = "if (El.className == 'blue' ) {\nEl.className = some_str + 'className20';\n}\n"
re.findall(pattern, code_str)
我也试过了。
pattern = r'.className\s*\+{,1}={1}\s*.*?\+?[\'"](.*?)["\']'
pattern = r'.className\s*\+?[=]{1}\s*.*?\+?[\'"](.*?)["\']'
欢迎任何见解。问题似乎是==
中出现code_str
。我使用的模式过于贪婪。我的理解是\+
正在逃避+
标志,但我可能是错的。
答案 0 :(得分:1)
为什么在.*?
之后有=\s*
?你想允许任何东西遵循等于后跟任意数量的空间吗?这就是允许== 'blue'
被接受的原因; \s*
不执行任何操作,但以下.*?
与第一个=
后面的=
匹配。放下它,它可以工作:
import re
pattern = r'.className\s*\+?=\s*\+?[\'"](.*?)["\']'
code_str = "if (El.className == 'blue' ) {\nEl.className = 'className20';\n}\n"
re.findall(pattern, code_str)
按预期生成['className20']
。问题是是否有某些理由允许任意字符存在。