我很幸运得到一个正则表达式构建,它可以处理除了特定字符串之前没有特定字符的所有内容。
例如这个字符串:
Mr. Jones likes fish.
应该像这样匹配:
Mr. Jones likes fish
而不是例如:
Mr
我认为这应该很容易,但它不会起作用。我已经让它在点上得到正确的匹配:
(?<!Mr)\.
虽然补充匹配不起作用。我试过这个:
(?<!Mr)[^.]*
因为我认为光标会在那个点上点,并且看到它被“先生”所取代并且它将不匹配。但确实如此。
这样的事情:
(^((?<!Mr).))*
但是那个正则表达式中的后视不再被认为是一个,它只是试图匹配每个角色。
我已经看到this回答,但我找不到任何帮助我的地方。
答案 0 :(得分:2)
在我看来,您希望匹配.
以外的任何字符,但句点前面有Mr
,因此您可以使用alternation(或可选组) )和lookbehind。
(?:[^.]+|(?<=Mr)\.)+
作为Java字符串:"(?:[^.]+|(?<=Mr)\\.)+"
Here is a demo at regex101(非Java)
(?:
打开非捕获group [^.]+
匹配一个或多个characters that are not .
(?<=Mr)\.
符合Mr