【问题标题】:What does the whitespace in Python RegEx '^(.+?(\d*)) *$' mean? [duplicate]Python RegEx '^(.+?(\d*)) *$' 中的空格是什么意思? [复制]
【发布时间】:2014-05-26 08:17:28
【问题描述】:

Python RegEx ^(.+?(\d*)) *$ 中的空格是什么意思?

pat = re.compile('^(.+?(\d*)) *$',re.M)

* 是指\s*吗?

可以忽略空格吗?即^(.+?(\d*)) *$ 是否与^(.+?(\d*))*$ 相同?

我跑了一些例子,上面两个问题的答案似乎都不是。

谢谢!

【问题讨论】:

  • 空格是空格,\s 包括空格、换行符、制表符等等,具体取决于语言。
  • 不,` *` 是任意数量的空格字符。 \s 匹配更多的空格,而不仅仅是` `。
  • 但是可以不使用前面的`\`进行转义吗?
  • @Tim 你不需要转义空格。基本上你所拥有的是“重复空间零次或多次”。其中空格是0x20。检查this post 关于\s,这取决于它完全匹配的语言。
  • @Tim:空格不需要转义。如果它可以帮助您更清楚地阅读正则表达式,您可以使用 [ ] 而不仅仅是空格。

标签: python regex


【解决方案1】:

* 表示 0 次或多次出现,$ 将匹配锚定到行尾,因此它允许(可能)尾随空格,但不允许制表符,除非它实际上是一个制表符。

不,如果您删除该空白,则后面带有不可见空格的行将不匹配。

就目前而言,它匹配一个或多个非数字的行序列,后跟可选数字和可选空格。

实际上,如果进行调试,我必须使用非贪婪匹配查找像“12345”这样的行发生了什么,因为我倾向于给自己写类似“^(\D+(\d+))\s *$" 或 "^(\D*.(\d+))\s*$" 取决于意图。在过去,您必须针对自己的贪婪匹配进行编码,这意味着我通常会通过习惯避免使用 .+(\d*) 之类的东西。捕获 0 位数字通常是一个错误,就像 .+ 消耗的第一个数字一样

【讨论】:

    【解决方案2】:

    您可以在http://www.regex101.com等在线正则表达式工具上自行测试

    这只是一个空格字符。

    供您参考,\s 实际上是“空白”,因此它匹配制表符、换页符和其他字符以及空格Whitespace link

    【讨论】:

    • 那个网站不错!它证实了我对“12345”的怀疑
    猜你喜欢
    • 2011-09-28
    • 2015-04-05
    • 2013-07-16
    • 2015-02-13
    • 2019-03-30
    • 1970-01-01
    • 2019-04-15
    • 2020-03-26
    • 2019-12-17
    相关资源
    最近更新 更多