在Java中使用正则表达式
我需要为除:file、for、from之外的所有非空字母序列构建一个正则表达式 因此,我应该从我的文本输入中获取所有值,不包括上述3个单词 这是正确的表达方式吗在Java中使用正则表达式,java,regex,Java,Regex,我需要为除:file、for、from之外的所有非空字母序列构建一个正则表达式 因此,我应该从我的文本输入中获取所有值,不包括上述3个单词 这是正确的表达方式吗 ^(?:(?!file|for|from).)*$ 我还试图在java程序中使用这个正则表达式模式,并假设它应该可以工作。但事实并非如此 我的示例代码如下: Pattern p = Pattern.compile("^(?:(?!file|for|from).)*$"); // Split input with the patter
^(?:(?!file|for|from).)*$
我还试图在java程序中使用这个正则表达式模式,并假设它应该可以工作。但事实并非如此
我的示例代码如下:
Pattern p = Pattern.compile("^(?:(?!file|for|from).)*$");
// Split input with the pattern
String[] result =
p.split("file is not there from for this time for this test");
for (int i=0; i<result.length; i++)
System.out.println(result[i]);
我的正则表达式中是否有错误,或者我在java中使用正则表达式的方式是否有错误
请告知
谢谢。您应该这样做:
String s = "file is not there from for this time for this test";
String[] splits = s.split("file|from|for");
这个问题模糊不清。 是否要提取字符串中不属于file、for、from的所有单词? 还是要匹配不包含这些单词的字符串? “for”被拒绝,但“负担得起”又如何呢:接受还是拒绝 就我对这个问题的理解而言,我建议,在一个链条中,抓住不是“文件”、“代表”或“来自”的单词,重新链条如下:
“\b?!文件| for | from\w+'除非您的问题学习正则表达式,如Isac,我相信您最好使用简单的拆分算法简单地拆分字符串,并手动过滤掉您不希望找到的任何条目。斯普利特是我们的朋友。如果要忽略的单词列表很大,请考虑将它们保存在一个哈希表中,并将每个提取的单词与该表进行检查。这将把您的算法从^2转换为ON 您不仅可以处理更快速、更易于阅读、编写和维护的代码,而且我想,到目前为止,您还没有找到有效的解决方案
我个人的经验是,通常情况下,您的正则表达式变得非常复杂,难以阅读,并且由于使用 你所说的非空字母序列是什么意思?你的意思是你想要所有的非空白序列,不匹配的三个关键字,其中包括数字,标点符号等,但不是空白?所有不匹配的纯字母序列,不包括数字、标点符号、空格等。?还有什么?你为什么需要正则表达式?为什么不直接读取数据,然后删除单词file、for和from?您期望的输出是什么?很难从一个破损的正则表达式中看出您的意图。是的,不要低估简单性的速度和易用性: