我想寫一個正則表達式,指定文本應以字母開頭,每個字符應該是字母,數字或下劃線,連續不應有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