假设我有一个字符串
str = "some_var = \n {'LOL'}"
我想对其进行re
搜索...
re.search(r'some_var =([.\s]+)\}', str)
据我所知,我应该搜索任何字符(包括换行符),直到在字符串中击中}
并将=
和它之间的所有内容都分组。
为什么我得到None
?
答案 0 :(得分:1)
在字符类中,点与文字点匹配,因此您的正则表达式将与捕获组中的点或空白字符([.\s]+)
匹配一次或多次。
您不能使用否定的字符类来匹配}
:
some_var =([^}]+)}
说明
some_var =
字面上匹配(
捕获组
[^}]+
使用否定的字符类(包括换行符)一次或多次不匹配}
)
关闭捕获组}
匹配}
答案 1 :(得分:1)
因为.
与包括换行符的任何字符都不匹配-实际上,它与除 换行符之外的任何字符均匹配。参见:
https://docs.python.org/3/library/re.html
您必须使用DOTALL
模式。
我不确定您对[.\s]
的意图是什么。它看起来像“任何字符加空格”。但是空格是一个字符,因此您只能说“任何字符”。我认为这可能就足够了:
re.search(r'some_var =(.+)\}', str, flags=re.DOTALL)
P.S。 str
是内置的。不要调用变量str
。