首页 > 解决方案 > 正则表达式匹配单词中不包含的单个非空白字符

问题描述

我正在尝试编写一个正则表达式来匹配特定单词中不包含的单个非空白字符。我得到的最接近的是以下。

(?!word_to_discard)\b\S+\b

问题是上面的表达式匹配不是 word_to_discard 的单词,而不是单个的非空白字符。任何想法如何做到这一点?

标签: regex

解决方案


让我们拆分问题:

1)您需要匹配特定单词中不包含的字符。最简单的方法是使用[ ]带有 negation的字符组^。我们还通过\s在字符组中添加标记来排除任何空格字符。

[^word_to_discard\s]

2) 现在,您说只需要匹配单个字符,因此您可以使用边界标记\b来确保没有前面/下一个字母数字字符。

\b[^word_to_discard\s]\b

3) 为了匹配所有单个字符,您需要遍历所有匹配项。那是特定于语言/引擎的。例如,在 JavaScript 中,您需要/g在 regex 模式的末尾指定参数,因此每次后续rgx.exec(text)调用都将获得text中的下一个匹配项:

const text = "w y o r d z";
const rgx = /\b[^word_to_discard\s]\b/g;

rgx.exec(text); // Matches "y"
rgx.exec(text); // Matches "z"
rgx.exec(text); // returns null (no more matches)

推荐阅读