【发布时间】:2009-05-20 17:12:09
【问题描述】:
我想截取以\*#\*开头的字符串
后跟一个 0 到 7 之间的数字
结尾是:##
类似\*#\*0##
但我找不到这个的正则表达式
【问题讨论】:
-
apologize there was an error on the searched pattern 我想截取以 *#* 开头的字符串,后跟 0 到 7 之间的数字并以:## 结尾,例如 *#*0# #
我想截取以\*#\*开头的字符串
后跟一个 0 到 7 之间的数字
结尾是:##
类似\*#\*0##
但我找不到这个的正则表达式
【问题讨论】:
假设您想只允许一个 # 之前和两个之后,我会这样做:
r'^(\#{1}([0-7])\#{2})'
请务必注意,Alex's 正则表达式也会匹配类似
###7######
########1###
这可能很重要,也可能不重要。
我上面的正则表达式匹配以 #[0-7]## 开头的字符串,并忽略字符串的结尾。如果您希望它仅在整行时匹配,则可以在末尾添加 $。
第一个反向引用为您提供整个 #
【讨论】:
以上示例均未考虑 *#*
^\*#\*[0-7]##$
通过:*#*7##
失败:*#*22324324##
失败:*#3232#
^ 字符将匹配字符串的开头,\* 将匹配单个星号,# 字符在此示例中不需要转义,最后 [0-7] 将仅匹配之间的单个字符0 和 7。
【讨论】:
r'\#[0-7]\#\#'
【讨论】:
正则表达式应该是 ^#[0-7]##$
【讨论】:
据我了解,您需要的最简单的正则表达式是:
rex= re.compile(r'^\*#\*([0-7])##$')
{1} 结构是多余的。
做完rex.match(或者rex.search,但这里没必要)之后,匹配对象的.group(1)包含给定的数字。
编辑:整个匹配的字符串始终以match.group(0) 的形式提供。如果您只需要完整的字符串,请删除正则表达式中的任何括号:
rex= re.compile(r'^\*#\*[0-7]##$')
【讨论】: