我有一个正则表达式公式,可用于查找数据中的特定模式。具体来说,它首先在“ {}”括号之间寻找字符,然后寻找“ 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)
有没有一种方法可以排除包含“ {”的字符串?
您的模式首先从{到}进行匹配,然后以非贪婪的方式.*?进行匹配,放弃匹配,直到它可以匹配p,点号和1+个数字为止。
之所以可以这样做是因为该点也可以匹配{}。
您可以使用否定的字符类[^{}]来匹配{}
\{[^{}]*\}[^{}]+p\. [0-9]+
Run Code Online (Sandbox Code Playgroud)