发现Caret的Python正则表达式问题(' ^')

时间:2014-03-24 12:45:53

标签: python regex

我的Python 3.2中的正则表达式有问题

我想确保一个字符串匹配我的critera,它是一个字母(或数字),然后是一个符号。

answer = bool(re.findall('[A-Z|1-9][^A-Z|1-9]',string))

这可以按预期工作。如果我测试A#我得到True,这适用于所有类型的企业。当我执行返回T^的{​​{1}}之类的内容时接受。无论插入符号之前是什么字母,都是一样的。这是我的正则表达式的问题还是Python?

3 个答案:

答案 0 :(得分:2)

这里的答案有帮助,但没有人在字符类中使用的^中找到答案,这意味着NOT ANY OF THESE THINGS,所以[^a]就是一切,但是字母a。你说'"没有在^之后和最近的未转义之前的事情'"

如上所述......或者事物......角色类是一个大的或者!

[\^a]匹配^或a。但要小心,通常反斜杠被视为"字母反斜杠"除非它实际上逃脱了某些东西,例如\k是反斜杠和k,但\n是换行符,\\n是反斜杠(字母)n。

然而,PHP并不是那么好。对于字母反斜杠你需要"\\\\",鉴于反斜杠可以被转义之后的事情(这是REGEX引擎的工作原理),PHP不使用"哦,你不能逃避ak,因此,他必须表示字母反斜杠后跟k",它会丢弃反斜杠。

这么多个小时......只是......太可怕了。

答案 1 :(得分:1)

你的正则表达式有点偏。

[A-Z|1-9]实际上意味着:

  • a-z
  • 之间的任何内容
  • 或字符|字面意思
  • 1-9之间的任何数字。

试试这个:

[A-Z0-9][^A-Z0-9]

但是,你的正则表达式应该在任何情况下匹配T^ ......

答案 2 :(得分:0)

尝试一下:

^[A-Za-z|1-9][^A-Za-z|1-9]$

我试图从你的正则表达式中删除区分大小写,这也接受了T ^。 我在http://regexpal.com/

上查了一下

这里的第一个^和最后一个$符号是字符串的开头和结尾。

工作演示:Here