正则表达式匹配仅包含特定字符的整个单词

时间:2012-05-23 03:50:24

标签: regex

我希望匹配仅包含已定义字符的整个单词(或字符串)。

例如,如果字母为dog

dog = match
god = match
ogd = match
dogs = no match (because the string also has an "s" which is not defined)
gods = no match
doog = match
gd = match

在这句话中:

dog god ogd, dogs o

...我希望在doggodo(而非ogd,上匹配,因为逗号或dogs由于s

4 个答案:

答案 0 :(得分:11)

这应该对你有用

\b[dog]+\b(?![,])

<强>解释

r"""
\b        # Assert position at a word boundary
[dog]     # Match a single character present in the list “dog”
   +         # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
\b        # Assert position at a word boundary
(?!       # Assert that it is impossible to match the regex below starting at this position (negative lookahead)
   [,]       # Match the character “,”
)
"""

答案 1 :(得分:4)

以下正则表达式代表您要查找的三个字符中的一个或多个匹配项:

[dog]+

说明:

方括号表示:“任何包含的字符”。

加号表示:“前一个表达式的一次或多次出现

这是完全相同的事情:

[ogd]+

答案 2 :(得分:2)

您使用的是哪种正则表达式/工具? (例如JavaScript,.NET,Notepad ++等)如果它支持前瞻和后瞻,你可以这样做:

(?<!\S)[dog]+(?!\S)

这样,您只能获得位于字符串开头或前面有空格的匹配,或者在字符串末尾或后跟空格的匹配。如果你不能使用lookbehind(例如,如果你使用的是JavaScript),你可以说出领先条件:

(?:^|\s)([dog]+)(?!\S)

在这种情况下,您将从组#1中检索匹配的单词。但是不要采取下一步并尝试用(?:$|\s)替换前瞻。如果你这样做,第一个命中(“dog”)将占用尾随空格,正则表达式将无法使用它来匹配下一个单词(“god”)。

答案 3 :(得分:1)

根据语言,这应该做你需要做的事情。它只会与你上面说的相符;

这个正则表达式:

[dog]+(?![\w,])

以字符串形式..

dog god ogd, dogs o

只会匹配..

dog, god, and o

Example in javascript

Example in php

两个[](括号)之间的任何内容都是一个字符类..它将匹配括号中的任何字符。您也可以使用范围.. [0-9][a-z]等,但它只匹配1个字符。 +*是量词。+搜索1个或多个字符,而*搜索零个或多个字符。您可以使用大括号({})指定显式字符范围,在其间放置一个数字或多个数字:{2}只匹配2个字符,而{1,3}将匹配1或3

()个括号之间的任何内容都可以用于回调,比如你想要返回或使用在字符串中作为替换返回的值。 ?!是否为前瞻,它与后面的字符类不匹配,以确保字符存在时字符串匹配。