我想用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);发布于 2014-02-13 17:55:05
matcher不会找到重叠的匹配,所以对于您的例子来说,这已经完成了您希望它做的事情。但是,如果有多个具有公共前缀的字符串,例如“钠”和“氯化钠”,则可能会遇到一些问题。
为了确保您总是得到最长的匹配,请确保在替换过程中始终有较长的字符串。因此,只要您的regex类似于\b(sodium chloride|sodium)\b,regex引擎将首先尝试sodium chloride,然后在必要时返回到sodium。
在本例中,在创建regex之前,您应该按照字符串长度(前面最长)对wordsSearch进行排序。
发布于 2014-02-13 17:54:59
如果您只想匹配no sodium,那么它就像往常一样。
但是,如果您希望只匹配以前没有sodium的no,那么它将是
(?<!no) sodiumhttps://stackoverflow.com/questions/21761788
复制相似问题