首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java regex在字符串中搜索单词及其否定。

使用java regex在字符串中搜索单词及其否定。
EN

Stack Overflow用户
提问于 2014-02-13 17:50:59
回答 2查看 124关注 0票数 0

我想用java在字符串中找到单词和它的否定。例如,比如说

代码语言:javascript
复制
String str = "The product contains no sodium but contains potassium"

我正在寻找“钠”和“无钠”在这串。我想根据结果采取具体行动。然而,我如何确保一旦“没有钠”在这个字符串中被识别,钠不会得到匹配使用正则表达式。我有一个这样的单词(子字符串)的列表,我需要在一大组字符串中搜索。

现在,我使用一个数组列表来存储要匹配的单词和字符串,我正在创建一个用于在输入字符串中搜索的模式。

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-13 17:55:05

matcher不会找到重叠的匹配,所以对于您的例子来说,这已经完成了您希望它做的事情。但是,如果有多个具有公共前缀的字符串,例如“钠”和“氯化钠”,则可能会遇到一些问题。

为了确保您总是得到最长的匹配,请确保在替换过程中始终有较长的字符串。因此,只要您的regex类似于\b(sodium chloride|sodium)\b,regex引擎将首先尝试sodium chloride,然后在必要时返回到sodium

在本例中,在创建regex之前,您应该按照字符串长度(前面最长)对wordsSearch进行排序。

票数 0
EN

Stack Overflow用户

发布于 2014-02-13 17:54:59

如果您只想匹配no sodium,那么它就像往常一样。

但是,如果您希望只匹配以前没有sodiumno,那么它将是

代码语言:javascript
复制
(?<!no) sodium
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21761788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档