Python 正则表达式查找插入符号('^')的问题
我在使用Python 3.2的时候遇到了一个正则表达式的问题。
我想确保一个字符串符合我的标准,也就是要有一个字母(或者数字),后面跟着一个符号。
answer = bool(re.findall('[A-Z|1-9][^A-Z|1-9]',string))
这个方法按预期工作。如果我测试一下 A#
,结果是 True
,这对所有输入都有效。除了当我输入 T^
时,结果是 False
。无论在这个符号前面是什么字母,结果都是一样的。请问这是我的正则表达式有问题,还是Python本身的问题呢?
3 个回答
试试这个:
^[A-Za-z|1-9][^A-Za-z|1-9]$
我尝试去掉你正则表达式中的大小写敏感,这样也能接受 T^。
我在 http://regexpal.com/ 上检查过了。
这里的第一个 ^ 和最后一个 $ 符号是用来表示字符串的开始和结束。
工作演示:在这里
你的正则表达式有点问题。
[A-Z|1-9]
实际上表示:
- 任何小写字母
a-z
- 或者字符
|
本身 - 或者任何数字
1-9
。
试试这个:
[A-Z0-9][^A-Z0-9]
不过,你的正则表达式应该能匹配到 T^
,无论大小写都可以...
这里有一些答案可以帮助你,但没有人提到在字符类中使用的 ^
符号。这个符号的意思是 NOT ANY OF THESE THINGS
,也就是说 [^a]
表示除了字母 a 以外的所有东西。你可以理解为“在 ^
后面和最近的未转义的 ]
之前的东西都不能出现”。
正如提到的,字符类就像是一个大大的“或”!
[\^a]
可以匹配 ^
或字母 a。不过要小心,通常情况下,反斜杠 \
被当作“反斜杠这个字母”来处理,除非它真的用来转义某个东西。例如,\k
是一个反斜杠和一个 k,但 \n
是换行符,\\n
则是反斜杠(这个字母)后面跟着 n。
不过,PHP 处理这些事情就没有那么简单了。你需要用 "\\\\"
来表示字母反斜杠。因为反斜杠后面的东西可以被转义(这是正则表达式引擎会处理的),PHP 不会理解“哦,你不能转义一个 k,所以它一定是字母反斜杠后面跟着 k”,它会直接忽略掉反斜杠。
真是浪费了很多时间……太糟糕了。