【发布时间】:2011-02-01 06:59:36
【问题描述】:
更新:
这个问题是一个史诗般的失败,但这是有效的解决方案。它基于 Gumbo 的回答(Gumbo 已经接近工作,所以我选择它作为接受的答案):
解决办法:
r'(?=[a-zA-Z0-9\-]{4,25}$)^[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*$'
原始问题(尽管经过 3 次修改)
我正在使用 Python,我不是试图提取值,而是测试以确保它符合模式。
允许值:
spam123-spam-eggs-eggs1
spam123-eggs123
spam
1234
eggs123
不允许的值:
eggs1-
-spam123
spam--spam
我只是不能在开始或结束时使用破折号。 a question on here 通过事后获取字符串值以相反的方向工作,但我只需要测试该值以便我可以禁止它。此外,它可以最长为 25 个字符,但最少为 4 个字符。此外,没有两个破折号可以相互接触。
这是我在进行了一些后视等实验后得出的结论:
# Nothing here
【问题讨论】:
-
您介意在发布之前实际完成您的答案吗?在人们开始回答您的问题后继续添加限制条件(最少 4 个字符,最多 25 个字符)是不礼貌的。
-
您提到至少 4 个字符,但在您的示例中,您将“123”作为允许值。应该在不允许的列中吗?
-
您的描述中没有任何地方说您只想允许字母、数字和破折号。此外,您一直在更改问题。有人应该如何回答这个问题而不投反对票?
-
最后的
[a-zA-Z0-9]+不是必须的;(\-[a-zA-Z0-9]+)*已经在报道了。 -
@Gumbo 谢谢,我误解了那部分,但现在我将其解读为(
alnum开头的任何破折号,以及此模式的零次或多次重复)。事实上,它不仅没有必要,而且实际上工作不正确。如果针对该 re 搜索字符串i-am-string-number-5,它将返回None,因为只有足够的内容可以被正则表达式的连字符模式吃掉。谢谢你所有的帮助。我已经编辑了我的解决方案。