regex Python正则表达式对不同字母的单个否定lookaheads

polhcujo  于 2023-05-08  发布在  Python
关注(0)|答案(1)|浏览(188)

我正在写一个程序来找出你可以在计算器上写的单词。我已经设置了正则表达式,这样它就可以找到包含“坏”字母的单词,这样我们就可以消除它们。
以下是搜索模式:

badLetters = "[ghjknpqrtuvwzGHJKNPQRTUVWZ]"

那些字母不能用我的计算器写
然而,像“sin”和“cos”这样的按钮存在。这意味着,只有当t后面不紧跟'an'时,我才想返回t的匹配
我的第一次尝试看起来像这样:

badLetters = "[ghjknpqrt(?!an)uvwzGHJKNPQRT(?!an)UVWZ]"

但这不管用。我想是在治疗(?!an)作为更坏的字符,而不是应用负先行。
所以我试着给‘t’和‘T’他们自己的方括号来应用条件。

badLetters = "[ghjknpqruvwzGHJKNPQRUVWZ][tT](?!an)"

那也没用。
如何在regex中实现几个不同的字母,每个字母都有不同的条件?把它们放在主方括号里是行不通的,给它们自己的方括号也是行不通的。
然后很明显,在这之后,我将扩展它,以允许'n',只有当它前面有'ta',或'si'等。
谢谢!

zz2j4svz

zz2j4svz1#

我相信在正则表达式中使用|符号(意思是“或”)会有所帮助。
使用正则表达式[ghjknpqruvwzGHJKNPQRUVWZ][tT](?!an),您要查找的是一个'bad letter' * 后跟 * a 't',它不位于'an'之前,而[ghjknpqruvwzGHJKNPQRUVWZ]|(?:[tT](?!an))查找的是一个'bad letter' * 或 * a 't',它不位于'an'之前。然后,您可以按照您的建议在此基础上进行构建。
Regex101这样的工具可以帮助理解和形成新的正则表达式搜索。

相关问题