【问题标题】:Regex to match the number zero in the string正则表达式匹配字符串中的数字零
【发布时间】:2021-03-11 10:24:18
【问题描述】:

有人可以帮我在单独的组中取零吗?

import re

text = 'fafsah000012fafaa'

zeroRegex = re.compile(r'^(\w*)((0)*\d*)(\w*)$')

matches = zeroRegex.search(text)

print(matches.groups())

【问题讨论】:

  • 模式中是否有任何部分是强制性的?或者输入可以是一个空字符串?另外,试试zeroRegex = re.compile(r'^([a-zA-Z]*)(0*)(\d*)([a-zA-Z]*)$')
  • 我只想得到一个不带零的字符串,如果我在单独的组中取一个 0-s 我会在没有该组的情况下创建一个新字符串,它会完成
  • ideone.com/gpJpBZ,有用吗?
  • 感谢您提供此代码,但为什么 \w 不起作用而 [a-zA-Z] 起作用?
  • \w 也匹配数字。如果您使用\w 来匹配字母,或者字母和_,则您误用了它。

标签: python-3.x regex regex-group


【解决方案1】:

你可以使用

zeroRegex = re.compile(r'^([a-zA-Z]*)(0*)(\d*)([a-zA-Z]*)$')
## Or, if you still need to match underscores and all Unicode letters and digits:
zeroRegex = re.compile(r'^([^\W\d]*)(0*)(\d*)([^\W\d]*)$')

查看regex demoPython demo online

请注意,\w* 以贪婪的方式匹配任何零个或多个字母、数字或下划线。使其非贪婪(如\w*?)在这里没有帮助,因为在此模式中所有模式都是可选,如果第一个\w*?被跳过,下一个0*和@987654328 @ 将匹配字符串的开头,最后一个 \w*\w*? 将获取字母数字字符串的其余部分。

因此,获得所需内容并保持所有子模式可选的唯一方法(这样即使是空字符串也可以使用此正则表达式解析),您需要从此模式中“减去”数字,并使用 @987654331 @ 只匹配 ASCII 字母,或 [^\W\d]*,匹配任何 Unicode 字母、下划线(以及其他一些连接符标点符号,但这通常不是问题)。

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 2011-11-08
    • 2012-06-05
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多