正则表达式如何在任何地方排除特定字符或字符串

时间:2018-01-07 17:28:00

标签: regex

the
cat
sat
on
the
mat

假设这些是不同的条目。正则表达式是什么才能从你正在搜索的东西中的任何地方排除特定字符,在本例中为“a”?

所以你会得到的命中是“the,on,the”

或者如果它是

中的单词
I like chocolate
bananas
chocolate cake

我希望只有“香蕉”可以通过在任何地方排除“巧克力”这个词来表现出来。

2 个答案:

答案 0 :(得分:4)

您需要的是对列入黑名单的单词或字符的负面预测。

跟着正则表达式做了你期望的事。

正则表达式: ^(?!.*a).*$

<强>解释

(?!.*a)如果黑名单字符出现在字符串中的任何位置,请提前查看并放弃匹配。

如果没有列入黑名单的字符,

.*只会从头到尾匹配整个字符串。

Regex101 Demo

对于将单词列入黑名单,您必须在负前瞻断言中修改和提及单词。

正则表达式: ^(?!.*chocolate).*$

Regex101 Demo

如果chocolate blackchocolate hotchocolate 等字符串的一部分,这也会放弃匹配。

通过添加单词边界严格匹配单词。

正则表达式: ^(?!.*\bchocolate\b).*$

通过在两端添加\b,它将严格预测chocolate并弃置匹配(如果存在)。

Regex101 Demo

答案 1 :(得分:1)

你的问题有点含糊不清,最后你会有几个选择。

第一个正则表达式解决方案(禁止单词中的字符):

\b(?:(?!a)\w)+\b
# word boundary, neg. lookahead, disallowing "a",
# afterwards match as many word characters as possible
# in the end another word boundary

a demo on regex101.com

<小时/>

第二个正则表达式解决方案(不完整的单词):

^(?!.*chocolate).+
# match the start of the line, additionally a neg. lookahead looking down the line

another demo on regex101.com

<小时/>

Programmtically:

假设Python,也可以转换为其他语言:

sentence = "the cat sat on the mat"
words_without_a = [word for word in sentence.split() if "a" not in word]
print(words_without_a)
# ['the', 'on', 'the']