【发布时间】:2014-02-14 02:01:04
【问题描述】:
我想使用 java 在字符串中找到单词及其否定。例如,说
String str = "The product contains no sodium but contains potassium"
我正在此字符串中同时搜索“钠”和“无钠”。我想根据结果采取具体行动。但是,我如何确保一旦在此字符串中识别出“无钠”,钠就不会使用正则表达式获得匹配器。我有一个需要在大量字符串中搜索的此类单词(子字符串)的列表。
现在,我正在使用一个数组列表来存储要匹配的单词和字符串,我正在使用它创建一个用于在输入字符串中搜索的模式
String patternString = "\\b(" + StringUtils.join(wordsSearch,"|") + ")\\b"; //making a pattern to search
Pattern pattern = Pattern.compile(patternString);
//using matcher to find the substrings that I have mentioned earlier
Matcher matcher = pattern.matcher(inputString);
【问题讨论】:
-
我认为这取决于你认为什么是“否定”。对于具体的示例,
\\b((?:no )?sodium)\\b会做你想做的事,\\b(no sodium|sodium)\\b或\\b(sodium|no sodium)\\b也会这样做。那么您到底在寻找什么? -
否定产品含有钠或不含钠。在这种情况下,给定产品描述,我需要确定描述是否包含钠或短语,如不包含钠或不含钠等@Jerry
-
如果您还没有这样做,请查看 Java RegEx 教程的Greedy, Reluctant, and Possessive Quantifiers 部分。它似乎与您手头的任务相关。
-
@Lazyprogrammer 但这只是让问题突然变得更广泛。
absence of sodium呢?还有其他许多表示“无钠”的方法? -
为了便于阅读,您应该分两步执行此操作。首先搜索“无钠”。如果没有匹配项,则搜索“钠”。此外,请注意分词 - 您不希望“氨基酸”的存在记录“无酸”的命中。