【问题标题】:Python regular expression to match # followed by 0-7 followed by ##Python正则表达式匹配#后跟0-7后跟##
【发布时间】:2009-05-20 17:12:09
【问题描述】:

我想截取以\*#\*开头的字符串

后跟一个 0 到 7 之间的数字

结尾是:##

类似\*#\*0##

但我找不到这个的正则表达式

【问题讨论】:

  • apologize there was an error on the searched pattern 我想截取以 *#* 开头的字符串,后跟 0 到 7 之间的数字并以:## 结尾,例如 *#*0# #

标签: python regex


【解决方案1】:

假设您想只允许一个 # 之前和两个之后,我会这样做:

r'^(\#{1}([0-7])\#{2})'

请务必注意,Alex's 正则表达式也会匹配类似

###7######
########1###

这可能很重要,也可能不重要。

我上面的正则表达式匹配以 #[0-7]## 开头的字符串,并忽略字符串的结尾。如果您希望它仅在整行时匹配,则可以在末尾添加 $

第一个反向引用为您提供整个 ### 字符串,第二个反向引用为您提供 # 内的数字。

【讨论】:

    【解决方案2】:

    以上示例均未考虑 *#*

    ^\*#\*[0-7]##$
    

    通过:*#*7##

    失败:*#*22324324##

    失败:*#3232#

    ^ 字符将匹配字符串的开头,\* 将匹配单个星号,# 字符在此示例中不需要转义,最后 [0-7] 将仅匹配之间的单个字符0 和 7。

    【讨论】:

    • 哎呀。我想我认为那些 * 是打错 Markdown 语法
    【解决方案3】:

    r'\#[0-7]\#\#'

    【讨论】:

    • 我很好奇转义“#”。在我阅读文档时,“#”仅在指定 re.VERBOSE 或在 (?#...) 构造中是特殊的。
    • 是的,但在 RE 模式中最好的做法是转义所有按字面意思使用的非字母数字 - 防止对可能破坏非转义字母数字的 RE 模式语言进行“升级”,另外,帮助读者,让他们知道他们不需要查找某些奇怪的未转义标点符号在 RE 模式中是否具有特殊含义;-)。
    【解决方案4】:

    正则表达式应该是 ^#[0-7]##$

    【讨论】:

      【解决方案5】:

      据我了解,您需要的最简单的正则表达式是:

      rex= re.compile(r'^\*#\*([0-7])##$')
      

      {1} 结构是多余的。 做完rex.match(或者rex.search,但这里没必要)之后,匹配对象的.group(1)包含给定的数字。

      编辑:整个匹配的字符串始终以match.group(0) 的形式提供。如果您只需要完整的字符串,请删除正则表达式中的任何括号:

      rex= re.compile(r'^\*#\*[0-7]##$')
      

      【讨论】:

      • 真的,我需要所有匹配的字符串,不仅是单个数字,而且你的建议非常有用,谢谢
      猜你喜欢
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2014-02-05
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多