我有这个字符串:
P.1 P.2 P.3 P.4
ASTON VETERINARY HOSPITAL
Page 1/2
00 PennelJ Road
Media, PA 19063-5983
(610) 474-5670
Client :
我想获取 Client
和 P.\d
之间的文本。这是演示:Regex
(P.\d)[\s\S]*(?=^.+Client :?)
问题在于它与第一页 P.1
相匹配。我需要在 Client 之前最近的 P.\d
。
如何更改正则表达式,使其与 P.4
匹配。
最佳答案
我用非贪婪运算符尝试过这个,但这行不通。我会尝试不再让整个正则表达式完全匹配您想要的内容,而是使用组。然后你可以编写一个匹配器来匹配任意数量的 P.1
构造,它使您扫描 Client
最后的字符串要简单得多,因为您不必尝试将其作为前瞻。因此:
String x = "P.1 P.2 P.3 P.4 foobar Client :";
Pattern p = Pattern.compile("((P\\.\\d)(.*(P\\.\\d))*)+(?<result>.*)Client");
Matcher m = p.matcher(x);
System.out.println(m.find());
System.out.println(m.group("result"));
似乎正好能生产出您想要的东西。语法(?<whatever>REGEX HERE)
正则表达式的意思是:让我稍后通过询问组“whatever”来捕获这一点。
关于java - 正则表达式向后匹配最近的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52407265/