带\+?=的正则表达式未按预期工作/转义“+”

2024-09-30 02:19:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

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_strclassName20组合。它仍然应该只返回['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中。我使用的模式太贪婪了。我的理解是\+正确地转义了+符号,但我可能错了


Tags: 代码importreifcodesomeblueel
1条回答
网友
1楼 · 发布于 2024-09-30 02:19:48

为什么在=\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']。问题是是否有理由允许在那里使用任意字符

相关问题 更多 >

    热门问题