gpt4 book ai didi

java - 多行文本的否定前瞻断言

转载 作者:行者123 更新时间:2023-12-02 01:39:38 25 4
gpt4 key购买 nike

我正在寻找一种方法来检查多行字符串(来自pdf)是否包含特定的字母组合,该字母组合不得以特定的前缀开头。具体来说,我正在尝试查找包含 ARC 的字符串但不包含NON-ARC .

我发现了这个很好的例子Regular expression for a string that does not start with a sequence但它似乎不适用于我的问题。用我的模式^(?!NON\\-)ARC.*我在单行测试中得到了预期的结果,在实际输入的情况下,否定前瞻断言具有误报。这是我所做的:

@Test
public void testRegexLookAhead() {
String strTestSimplePos = "ARC 0.1-1";
String strTestSimpleNeg = "NON-ARC 3.4-1";

String strTestRealPos = "HEADLINE\r\n" + "Subheader Author\r\n" + "ARC 0.1-1\r\n" + "20190211";
String strTestRealNeg = "HEADLINE\r\n" + "Subheader Author\r\n" + "NON-ARC 0.1-1\r\n" + "20190211";

//based on https://stackoverflow.com/questions/899422/regular-expression-for-a-string-that-does-not-start-with-a-sequence
String regexNoNON = "^(?!NON\\-)ARC.*";

Pattern noNONPatter = Pattern.compile(regexNoNON);

System.out.println(noNONPatter.matcher(strTestSimplePos).find()); //true OK
System.out.println(noNONPatter.matcher(strTestSimpleNeg).find()); //false OK
System.out.println(noNONPatter.matcher(strTestRealPos).find()); //false but should be true -> does not work as intended
System.out.println(noNONPatter.matcher(strTestRealNeg).find()); //false OK

如果有人能指出哪里出了问题,我会很高兴...

编辑:这被标记为 How to use java regex to match a line 的重复项- 但是我根本没有尝试使用正则表达式来匹配一行。只需要一种方法来查找多行文本输入的特定序列(具有负前瞻)。解决另一个问题的一种方法也是解决这个问题的方法(使用 java.util.regex.Pattern.MULTILINE 编译模式) - 但问题最多是相关的。

最佳答案

您的输入字符串有多行并且您正在使用插入符号,您需要添加多行标志:

Pattern.compile(regexNoNON, java.util.regex.Pattern.MULTILINE);

关于MULTILINE :

Enables multiline mode.

In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence.

关于java - 多行文本的否定前瞻断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624649/

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