gpt4 book ai didi

java - 如何处理其开头和/或结尾分为两行的正则表达式?

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:31 24 4
gpt4 key购买 nike

遇到一种情况,只要开始和结束序列在一行上并且不分段,我构建的正则表达式就可以正常工作。例如,如果需要从 ABCDE 和 VWXYZ 序列之间的以下文本中提取内容,则应返回 1234567890@#$@#$@##:

-@$@$@#@$@AB
CDE123456789
0@#$@#$@##VW
XYZ00000

在这两个实例中 ABCDE 是不同的。我希望 Java 有一种方法可以满足这个需求。

谢谢

最佳答案

您可以使用 String pat = "(?s)A\\R*B\\R*C\\R*D\\R*E(.*?)V\\R*W\\R*X\\R*Y\\R*Z",其中 \\R* 匹配零个或多个换行符,而 (?s) 使 .*? 中的点尽可能少地匹配零个或多个字符(包括换行符)(由于 *? 惰性量词)。

参见 this IDEONE demo:

String pat = "(?s)A\\R*B\\R*C\\R*D\\R*E(.*?)V\\R*W\\R*X\\R*Y\\R*Z";
String s = "-@$@$@#@$@AB\nCDE123456789\n0@#$@#$@##VW\nXYZ00000";
Matcher m = Pattern.compile(pat).matcher(s);
while(m.find())
{
System.out.println(m.group(1));
}

如果效果不佳,您可以尝试另一个展开的正则表达式,但其性能将取决于您的内容中有多少个 V 符号:

String pat = "A\\R*B\\R*C\\R*D\\R*E([^V]*(?:V(?!\\R*W\\R*X\\R*Y\\R*Z)[^V]*)*)V\\R*W\\R*X\\R*Y\\R*Z";

如果字母之间可能有空格,请使用 \s* 而不是 \R*:

String pat = "(?s)A\\s*B\\s*C\\s*D\\s*E(.*?)V\\s*W\\s*X\\s*Y\\s*Z"
// or
String pat = "A\\s*B\\s*C\\s*D\\s*E([^V]*(?:V(?!\\s*W\\s*X\\s*Y\\s*Z)[^V]*)*)V\\s*W\\s*X\\s*Y\\s*Z";

关于java - 如何处理其开头和/或结尾分为两行的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38894131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com