0

假设我有一个字符串

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

我想re在它上面运行 -search ......

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

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

为什么我会得到None这样的结果?

4

2 回答 2

1

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

您可以不匹配}使用否定字符类:

some_var =([^}]+)}

正则表达式演示

解释

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

演示

于 2018-08-30T17:10:15.073 回答
1

因为.不匹配任何字符,包括换行符——实际上它匹配换行符之外的任何字符。看:

https://docs.python.org/3/library/re.html

你必须使用DOTALL模式。

我不确定你的意图是什么[.\s]。它看起来像“任何字符加空格”。但是空格是一个字符,所以你可以说“任何字符”。我认为这可能就足够了:

re.search(r'some_var =(.+)\}', str, flags=re.DOTALL)

PSstr是内置的。不要调用变量str

于 2018-08-30T17:13:11.990 回答