正则表达式排除特定字符

mal*_*bu2 6 regex

我有一个正则表达式公式,可用于查找数据中的特定模式。具体来说,它首先在“ {}”括号之间寻找字符,然后寻找“ p。”并在其后获取数字。我注意到,在某些情况下,如果方括号后不久没有“ p。”值,它将继续经过下一个方括号并在其后获取数字。

例如,这是我的示例数据:

{Hello}, [1234] (Test). This is sample data used to answer a question {Hello2} [Ch.8 p. 87 gives more information about...
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

\{(.*?)\}(.*?)p\. ([0-9]+)
Run Code Online (Sandbox Code Playgroud)

我希望它只返回此:

{Hello2}  [Ch.8 p. 87
Run Code Online (Sandbox Code Playgroud)

但它返回以下内容:

{Hello},  [123:456] (Test).  This is stample data used to answer a
question {Hello2}  [Ch.8 p. 87
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以排除包含“ {”的字符串?

The*_*ird 6

您的模式首先从{到}进行匹配,然后以非贪婪的方式.*?进行匹配,放弃匹配,直到它可以匹配p,点号和1+个数字为止。

之所以可以这样做是因为该点也可以匹配{}

您可以使用否定的字符类[^{}]来匹配{}

\{[^{}]*\}[^{}]+p\. [0-9]+
Run Code Online (Sandbox Code Playgroud)

正则表达式演示