Python 正则表达式查找插入符号('^')的问题

0 投票
3 回答
1538 浏览
提问于 2025-04-17 23:39

我在使用Python 3.2的时候遇到了一个正则表达式的问题。

我想确保一个字符串符合我的标准,也就是要有一个字母(或者数字),后面跟着一个符号。

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

这个方法按预期工作。如果我测试一下 A#,结果是 True,这对所有输入都有效。除了当我输入 T^ 时,结果是 False。无论在这个符号前面是什么字母,结果都是一样的。请问这是我的正则表达式有问题,还是Python本身的问题呢?

3 个回答

0

试试这个:

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

我尝试去掉你正则表达式中的大小写敏感,这样也能接受 T^。

我在 http://regexpal.com/ 上检查过了。

这里的第一个 ^ 和最后一个 $ 符号是用来表示字符串的开始和结束。

工作演示:在这里

1

你的正则表达式有点问题。

[A-Z|1-9] 实际上表示:

  • 任何小写字母 a-z
  • 或者字符 | 本身
  • 或者任何数字 1-9

试试这个:

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

不过,你的正则表达式应该能匹配到 T^,无论大小写都可以...

2

这里有一些答案可以帮助你,但没有人提到在字符类中使用的 ^ 符号。这个符号的意思是 NOT ANY OF THESE THINGS,也就是说 [^a] 表示除了字母 a 以外的所有东西。你可以理解为“在 ^ 后面和最近的未转义的 ] 之前的东西都不能出现”。

正如提到的,字符类就像是一个大大的“或”!

[\^a] 可以匹配 ^ 或字母 a。不过要小心,通常情况下,反斜杠 \ 被当作“反斜杠这个字母”来处理,除非它真的用来转义某个东西。例如,\k 是一个反斜杠和一个 k,但 \n 是换行符,\\n 则是反斜杠(这个字母)后面跟着 n。

不过,PHP 处理这些事情就没有那么简单了。你需要用 "\\\\" 来表示字母反斜杠。因为反斜杠后面的东西可以被转义(这是正则表达式引擎会处理的),PHP 不会理解“哦,你不能转义一个 k,所以它一定是字母反斜杠后面跟着 k”,它会直接忽略掉反斜杠。

真是浪费了很多时间……太糟糕了。

撰写回答