Python: regex re.compile(r'^[-\w]+$') 是如何搜索的?或在此上下文中,regex 是如何工作的?

2 投票
3 回答
4787 浏览
提问于 2025-04-15 18:33

通过阅读文档这里,我觉得

re.compile(r'^[-\w]+$')

这个代码只是在查找是否有字母数字、下划线或连字符的字符。但实际上,只有当所有字符都符合这个描述时,它才会返回匹配结果(也就是说,如果有空格、美元符号或星号等,它就会失败)。

我不太明白它是怎么检查所有字符的,尤其是当它说:

“'*'、'+'和'?'这些符号都是贪婪的;它们会尽可能多地匹配文本。”

这难道不意味着如果第六个字符是空格,它会尽量匹配尽可能多的内容,然后停下来,返回前五个字符的匹配结果(而不是说“抱歉,我没找到任何匹配”)吗?

提前谢谢你(我对正则表达式真的是个新手,每次再学的时候都觉得很困惑)。

3 个回答

3

在正则表达式中,^$ 分别代表字符串的开头和结尾。这意味着,字符串中的所有字符都必须与中间的模式完全匹配。

4

这两个符号 ^$ 分别表示字符串的开始和结束。所以 ^[-\w]+$ 这个表达式只有在字符串的开头和结尾之间,只有一个或多个字母、数字或者连字符([-\w]+)的时候才会匹配成功。

2

就像上面回答的那样,^ 和 $ 是用来包围中间的所有字符的,它们分别代表行的开始和结束。如果对任何表达式有疑问,可以试试调试模式,这通常能解释很多问题:

>>> p = re.compile("^[-\w]+$", re.DEBUG)
at at_beginning
max_repeat 1 65535
  in
    literal 45
    category category_word
at at_end
>>>

撰写回答