模式的正则表达式,但也否定一个词
regex for a pattern, but also negate a word
是否有不包含给定单词但匹配另一个模式的正则表达式?
我有一个像下面这样的简单模式,用于在我使用的解析器中抓取单词。
field = re.compile(r"[a-zA-Z0-9]+")
解析器可以很好地确定某个东西是变量还是函数,但我 运行 遇到了一个问题,它获取了使用 end 的结束代码块 关键字。
foo = 3
end if <-- end is a keyword and should not be counted as a variable
有没有办法更新正则表达式以匹配除 end 以外的所有当前匹配的词?
foo 会匹配。
en 会匹配。
end 将 not 匹配。
endx 会匹配。
在评论中@phylogenesis 提供了一个可行的答案
\b(?!end\b)[a-zA-Z0-9]+
我会解释 why/how 这个正则表达式回答了你的问题。
关键是negative lookahead (?!end\b)
with the word boundaries\b
起到了关键的配角
前导 \b
确保您的模式从单词的开头开始匹配,然后否定前瞻 (?!end\b)
仅在单词的前三个字母不是 e 时才允许模式匹配,n,d 后跟单词边界(a.k.a。单词'end')。前瞻中的单词边界确保它不会清除像 'endive'.
这样的单词
是否有不包含给定单词但匹配另一个模式的正则表达式?
我有一个像下面这样的简单模式,用于在我使用的解析器中抓取单词。
field = re.compile(r"[a-zA-Z0-9]+")
解析器可以很好地确定某个东西是变量还是函数,但我 运行 遇到了一个问题,它获取了使用 end 的结束代码块 关键字。
foo = 3
end if <-- end is a keyword and should not be counted as a variable
有没有办法更新正则表达式以匹配除 end 以外的所有当前匹配的词?
foo 会匹配。
en 会匹配。
end 将 not 匹配。
endx 会匹配。
在评论中@phylogenesis 提供了一个可行的答案
\b(?!end\b)[a-zA-Z0-9]+
我会解释 why/how 这个正则表达式回答了你的问题。
关键是negative lookahead (?!end\b)
with the word boundaries\b
起到了关键的配角
前导 \b
确保您的模式从单词的开头开始匹配,然后否定前瞻 (?!end\b)
仅在单词的前三个字母不是 e 时才允许模式匹配,n,d 后跟单词边界(a.k.a。单词'end')。前瞻中的单词边界确保它不会清除像 'endive'.