这个问题是史诗般的失败,但这是一个有效的解决方案.这是基于Gumbo的答案(Gumbo接近工作,所以我选择它作为接受的答案):
r'(?=[a-zA-Z0-9\-]{4,25}$)^[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*$'
Run Code Online (Sandbox Code Playgroud)
我正在使用Python,我不是试图提取值,而是测试以确保它符合模式.
spam123-spam-eggs-eggs1
spam123-eggs123
spam
1234
eggs123
Run Code Online (Sandbox Code Playgroud)
eggs1-
-spam123
spam--spam
Run Code Online (Sandbox Code Playgroud)
我只是不能在开始或结束时冲刺.这里有一个问题是通过在事实之后获取字符串值而在相反方向上工作,但我只需要测试该值以便我可以禁止它.此外,它最多可以有25个字符长,但至少有4个字符长.此外,没有2个破折号可以互相接触.
这是我在进行一些后观实验后得出的结果:
# Nothing here
Run Code Online (Sandbox Code Playgroud)
Gum*_*mbo 16
试试这个正则表达式:
^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$
Run Code Online (Sandbox Code Playgroud)
此正则表达式仅允许连字符分隔一个或多个字符的序列[a-zA-Z0-9]
.
编辑 跟进您的评论:表达式(…)*
允许组内的部分重复零次或多次.这意味着
a(bc)*
Run Code Online (Sandbox Code Playgroud)
是相同的
a|abc|abcbc|abcbcbc|abcbcbcbc|…
Run Code Online (Sandbox Code Playgroud)
编辑 现在您已经更改了要求:由于您可能不希望限制其长度中每个连字符分隔部分的单词,因此您需要一个前瞻性断言来考虑长度:
(?=[a-zA-Z0-9-]{4,25}$)^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23480 次 |
最近记录: |