为了账号安全,请及时绑定邮箱和手机立即绑定

多行文本的负前瞻断言

多行文本的负前瞻断言

慕无忌1623718 2022-06-15 09:38:14
我正在寻找一种方法来检查多行字符串(来自pdf)是否包含一定不能以特定前缀开头的特定字母组合。具体来说,我正在尝试查找包含ARC但不包含的字符串NON-ARC。我发现了这个很好的示例正则表达式,用于不以序列开头的字符串,但它似乎不适用于我的问题。使用我的模式^(?!NON\\-)ARC.*,我在单行测试中得到了预期的结果,在实际输入的情况下,否定前瞻断言有误报。这是我所做的:@Testpublic 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 - 但是我根本没有尝试使用 regex 来匹配行。只需要一种方法来为多行文本输入找到特定序列(带有负前瞻)。解决另一个问题的一种方法也是解决这个问题的方法(使用 java.util.regex.Pattern.MULTILINE 编译模式) - 但问题充其量是相关的。
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

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

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

关于多线

启用多行模式。

在多行模式中,表达式 ^ 和 $ 分别在行终止符或输入序列的结尾之后或之前匹配。默认情况下,这些表达式只匹配整个输入序列的开头和结尾。


查看完整回答
反对 回复 2022-06-15
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

试试这个正则表达式:

HEADLINE(?:(?!HEADLINE)[\s\S])*(?<!NON-)ARC(?:(?!HEADLINE)[\s\S])*

点击演示

JAVA代码

解释:

  • HEADLINE- 匹配单词HEADLINE

  • (?:(?!HEADLINE)[\s\S])*- 匹配不以单词开头的任何字符的 0+ 次出现HEADLINE

  • (?<!NON-)ARCARC-如果单词前面没有紧跟,则匹配该单词NON-

  • (?:(?!HEADLINE)[\s\S])*- 匹配不以单词开头的任何字符的 0+ 次出现HEADLINE


查看完整回答
反对 回复 2022-06-15
  • 2 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信