java - 多行文本的负前瞻断言
问题描述
我正在寻找一种方法来检查多行字符串(来自pdf)是否包含一定不能以特定前缀开头的特定字母组合。具体来说,我正在尝试查找包含ARC
但不包含的字符串NON-ARC
。
我发现了这个很好的示例正则表达式,用于不以序列开头的字符串,但它似乎不适用于我的问题。使用我的模式^(?!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 - 但是我根本没有尝试使用 regex 来匹配行。只需要一种方法来为多行文本输入找到特定序列(带有负前瞻)。解决另一个问题的一种方法也是解决这个问题的方法(使用 java.util.regex.Pattern.MULTILINE 编译模式) - 但问题充其量是相关的。
解决方案
推荐阅读
- ibm-integration-bus - 如何从运行在 IBM IIB 10+ 上的 ESQL 代码获取代理的 UUID、主机名?
- javascript - PWA 缓存的最大值是多少?我可以缓存所有内容吗?
- java - 子字符串(java)不像我预期的那样工作
- javascript - 如何遍历json数据并合并具有相同状态ID的行?
- javascript - 制表符读取日期格式的未知文件
- javascript - 尝试根据当前 Iframe URL 显示 Iframe
- python - 带有 WHERE 子句的 pymysql SELECT
- vb.net - 函数中应该使用 ByRef 吗?
- sql-server - 将消息标记为已查看
- docker - 使用 Kubeadm 为 Helm 初始化 Tiller - Kubernetes