我有以下代码:
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
中。我使用的模式太贪婪了。我的理解是\+
正确地转义了+
符号,但我可能错了
为什么在
=\s*
之后有一个.*?
?你想让任何东西都跟在一个等号后面,后面跟任意数量的空格吗?这就是允许== 'blue'
被接受的原因;\s*
什么也不做,但是下面的.*?
与第一个=
后面的=
匹配。放下它,它就工作了:按预期产生
['className20']
。问题是是否有理由允许在那里使用任意字符相关问题 更多 >
编程相关推荐