我希望匹配仅包含已定义字符的整个单词(或字符串)。
例如,如果字母为d
,o
,g
:
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
...我希望在dog
,god
和o
(而非ogd,
上匹配,因为逗号或dogs
由于s
)
答案 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
两个[]
(括号)之间的任何内容都是一个字符类..它将匹配括号中的任何字符。您也可以使用范围.. [0-9]
,[a-z]
等,但它只匹配1个字符。 +
和*
是量词。+
搜索1个或多个字符,而*
搜索零个或多个字符。您可以使用大括号({}
)指定显式字符范围,在其间放置一个数字或多个数字:{2}
只匹配2个字符,而{1,3}
将匹配1或3
()
个括号之间的任何内容都可以用于回调,比如你想要返回或使用在字符串中作为替换返回的值。 ?!是否为前瞻,它与后面的字符类不匹配,以确保字符存在时字符串不匹配。