重新模块有些麻烦(特别是:字符类中的。(DOT))

时间:2018-08-30 17:03:46

标签: python regex

假设我有一个字符串

str = "some_var = \n {'LOL'}"

我想对其进行re搜索...

re.search(r'some_var =([.\s]+)\}', str)

据我所知,我应该搜索任何字符(包括换行符),直到在字符串中击中}并将=和它之间的所有内容都分组。

为什么我得到None

2 个答案:

答案 0 :(得分:1)

在字符类中,点与文字点匹配,因此您的正则表达式将与捕获组中的点或空白字符([.\s]+)匹配一次或多次。

您不能使用否定的字符类来匹配}

some_var =([^}]+)}

Regex demo

说明

  • some_var =字面上匹配
  • (捕获组
    • [^}]+使用否定的字符类(包括换行符)一次或多次不匹配}
  • )关闭捕获组
  • }匹配}

Demo

答案 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