我想写一个正则表达式,指定文本应以字母开头,每个字符应该是字母,数字或下划线,连续不应有2个下划线,并且应以字母或数字结尾。目前,我唯一拥有的是^[a-zA-Z]\w[a-zA-Z1-9_]
,但由于它只匹配3个字符,并且允许重复下划线,所以这似乎不能正常工作。我也不知道如何指定最后一个字符的要求。正则表达式 - 以字母开头和结尾,只接受字母,数字和_
12
A
回答
6
^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$
4
下面是一个使用负先行(在所有正则表达式引擎不支持)的解决方案:
^[a-zA-Z](((?!__)[a-zA-Z0-9_])*[a-zA-Z0-9])?$
测试,它按预期工作:
import re
tests = [
('a', True),
('_', False),
('zz', True),
('a0', True),
('A_', False),
('a0_b', True),
('a__b', False),
('a_1_c', True),
]
regex = '^[a-zA-Z](((?!__)[a-zA-Z0-9_])*[a-zA-Z0-9])?$'
for test in tests:
is_match = re.match(regex, test[0]) is not None
if is_match != test[1]:
print "fail: " + test[0]
0
看到的规则如何是相当复杂的,我'd建议如下:
/^[a-z](\w*)[a-z0-9]$/i
匹配整串和捕获中介e字符。然后或者用字符串的功能或以下的正则表达式:
/__/
检查,如果所捕获的部分具有一排两个下划线。例如在Python它应该是这样的:
>>> import re
>>> def valid(s):
match = re.match(r'^[a-z](\w*)[a-z0-9]$', s, re.I)
if match is not None:
return match.group(1).count('__') == 0
return False
35
我将它取刺:
/^[a-z](?:_?[a-z0-9]+)*$/i
解释:
/
^ # match beginning of string
[a-z] # match a letter for the first char
(?: # start non-capture group
_? # match 0 or 1 '_'
[a-z0-9]+ # match a letter or number, 1 or more times
)* # end non-capture group, match whole group 0 or more times
$ # match end of string
/i # case insensitive flag
非捕获组需要照顾a)不允许两个_
(每个组至少强制一个字母或数字)和b)只允许最后一个字符是一个字母或数字。
一些测试字符串:
"a": match
"_": fail
"zz": match
"a0": match
"A_": fail
"a0_b": match
"a__b": fail
"a_1_c": match
+0
这比接受的答案更有帮助,因为它解释了每个分组/保留字符的含义。感谢细节,因为正则表达式通常是外来语言。 – 2017-08-17 16:00:33
相关问题
- 1. 接受数字,字母和连字符的正则表达式
- 2. PostgreSQL正则表达式检查以拉丁字母和字母字符开头
- 3. 正则表达式 - 字符串包含每个字母之间的“*”,但仅以字母开头和结尾
- 4. 正则表达式只接受字母数字数据
- 5. 正则表达式接受字母数字和/.~?=+&
- 6. flex:只接受数字,字母,空格的正则表达式
- 7. 用户名以字母开头并以字母或数字结尾的正则表达式
- 8. Javascript正则表达式只接受字母,空格和ñ
- 9. 正则表达式匹配只包含字母和数字的字母数字
- 10. 正则表达式只接受几个字母字符
- 11. 正则表达式匹配一个字母字母和数字
- 12. 的字母数字字符正则表达式和 - /只
- 13. 正则表达式 - 搜索以字母开头并以字母或空格结尾的模式
- 14. 正则表达式接受字符串中的数字和字母,但不只是字母
- 15. 正则表达式接受至少一个字母字符和数字字符
- 16. 正则表达式 - 以字符串开头和结尾
- 17. 正则表达式* 11F23H3 *:以*开头和结尾,7个大写字母或数字在
- 18. 正则表达式只允许字母和数字
- 19. Java的正则表达式大写字母和数字只有
- 20. 正则表达式X字符长,字母数字但不是_和句点,但不在开头或结尾
- 21. 以字母/ _开头的字符串和(可能)以下字母/数字/ _
- 22. 如何创建只接受字母数字字符的正则表达式?
- 23. 正则表达式接受字母或字母数字字符或带有特殊符号的字母字符
- 24. 正则表达式匹配以字母开头和7个字符长度
- 25. 正则表达式只接受字母后跟逗号
- 26. 正则表达式匹配字母数字,非字母数字和空格
- 27. 正则表达式字母数字字符串+特殊字母
- 28. 正则表达式的字母数字
- 29. 正则表达式不字母数字
- 30. 字母数字的正则表达式
您正在使用什么语言/方言正则表达式? – 2010-05-12 18:02:42
为什么你最后一个字符类不包含零? – SilentGhost 2010-05-12 18:20:52
我不确定。尽管如此,我在记事本++中测试它。至于不包括零,这是一个错误。 – jreid9001 2010-05-12 23:08:36