如何匹配所有内容,直到遇到特定的人群
匹配:
Group1:
abc def xyz what ever foo blah blah
keep matching this
and this
组2:
01 Feb 2018 blah blah blah
keep matching this
and this
keep matching this
and this
第3组:
01 Mar 2018 blah blah blah
发件人:
abc def xyz what ever foo blah blah
keep matching this
and this
01 Feb 2018 blah blah blah
keep matching this
and this
keep matching this
and this
01 Mar 2018 blah blah blah
匹配01 Jan 2018
之前的所有内容,这里的日期是模式([0-9]{2}\s[A-Za-z]{3}\s[0-9]{4})
这似乎不起作用^((.*)(?!([0-9]{2}\s[A-Za-z]{3}\s[0-9]{4})))
答案 0 :(得分:3)
您可以将此正则表达式与前瞻和DOTALL
修饰符一起使用:
(?ms)(.+?(?=^\d{2}\s[A-Za-z]{3}\s\d{4}|\z))
说明:
(?ms)
:启用DOTALL
修饰符,以便我们可以使用.
匹配包括换行符在内的任何字符。同时启用MULTILINE
模式以能够^
和$
锚点。.+?
:匹配1个或多个字符,包括换行符(?=^\d{2}\s[A-Za-z]{3}\s\d{4})
:使用前瞻性断言确保我们提前预定日期(格式为dd-mon-yyyy
)代码:
final String regex = "(?ms)(.+?(?=^\\d{2}\\s[A-Za-z]{3}\\s\\d{4}|\\z))";
final Pattern pattern = Pattern.compile( regex );
final Matcher matcher = pattern.matcher( input );
while (matcher.find()) {
System.out.println("Match: " + matcher.group(0));
}
答案 1 :(得分:0)
我知道你现在要做什么。
为了避免复杂化,需要进行类似这样的操作。
StreamsBuilder builder = new StreamsBuilder();
builder.stream("your-input-topic")
.groupBy((k,v) -> v)
.count()
.toStream()
.to("your-output-topic");
https://regex101.com/r/xGmVGp/1
可读正则表达式
"(?s)(?=.)([0-9]{2}\\s[A-Za-z]{3}\\s[0-9]{4})?.*?(?=(?:[0-9]{2}\\s[A-Za-z]{3}\\s[0-9]{4})|\\z)"