【问题标题】:Disection of re 're.compile(r"^[a-zA-Z][\w_]{2,23}[^_]$")'re 're.compile(r"^[a-zA-Z][\w]{2,23}[^_]$")' 的剖析
【发布时间】:2022-01-07 17:02:21
【问题描述】:

我是 python 编程的新手,我正在尝试一些挑战来改进我的编码;我遇到以下正则表达式:(r"^[a-zA-Z][\w_]{2,23}[^_]$").

做了一些研究,我明白这一点:

r" = 表达式是一个原始字符串(不确定这完全是什么意思)

^[a-zA-Z] = 这告诉我字符串必须以字母开头

[\w_]{2,23} = 从val[2]val[23] 的字符串主体必须是字母数字

[^_]$ = 结尾必须是下划线

如果我的研究是正确的,我不明白为什么 [\w_] 上包含下划线。我认为字母数字必须只有[\w].

如果我错了,请帮我澄清一下。

【问题讨论】:

  • 更正 ->[\w_]{2,23} = 接下来必须有一个长度在 2 到 23 之间的字母数字字符串。
  • [\w_] = 字母数字下划线;方括号定义了一个与其中列出的任何内容相匹配的字符集。 [^_] = 任何除了下划线;插入符号作为集合的第一个字符会否定它。
  • @jasonharper \w 并不意味着“字母数字”。检查docs
  • @Evergreen 是对的;我需要更正我的研究。我很抱歉。
  • 您是否正在寻找有关所有点的确认信息?如果是这样,那对于堆栈溢出问题来说太宽泛了;相反,请一次只问一个具体问题,但一定要提供上下文的所有细节。您阅读过re module 的文档吗?它解释了所有语法以及为什么要使用原始字符串。此外,如果您想要原始字符串演示,see the tutorial。有关更多提示,请参阅How to Ask。 [我之前对此效果的评论已被删除,我不知道为什么。]

标签: python regex re


【解决方案1】:

\ 是一个转义字符
\w 在正则表达式中被认为是一个字符,因为转义字符
意思是:

任何“类似单词”(ascii)字符[^a-zA-Z0-9_]\

当您执行 [\w_] 时,这是任何 word like characterunderscore。不需要下划线,因为它包含在 \w 中。

【讨论】:

  • 下划线一个单词字符。阅读文档:\w
  • 这是一个社区 wiki,如果您想更改它...
  • 如果我愿意,我会发布自己的答案,因为这个答案并不能解决 OP 的所有困惑以及其他问题。但是,这个问题本身就太宽泛了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多