我需要编写检查以下单词的正则表达式:必须以字母开头,可能包含 {3,16} 数字和\或字母。
我尝试了以下正则表达式\b[A-Za-z]+[A-Za-z0-9]*{3,16}\b
,但出现错误。怎么了?
我需要编写检查以下单词的正则表达式:必须以字母开头,可能包含 {3,16} 数字和\或字母。
我尝试了以下正则表达式\b[A-Za-z]+[A-Za-z0-9]*{3,16}\b
,但出现错误。怎么了?
你的问题是你的第二个角色类两者都有*
,{3,16}
这意味着{3,16}
没有什么可以量化的。另外,您声明输入字符串必须仅以一个字母开头,但+
表示1..many
. 我想你想要:
\b // boundary
[A-Za-z] // single character
[A-Za-z0-9]{2,15} // A further 2-15 alpha numerics
\b // boundary
由于*
. 删除它以获得有效的正则表达式:
\b[A-Za-z]+[A-Za-z0-9]{3,16}\b
然而,这个正则表达式并不是你想要的,它是:
\b[A-Za-z][A-Za-z0-9]{2,15}\b
您需要{2,15}
(而不是{3,16}
),因为第一个字符对其中一个很重要{3,16}
一些示例 Python 代码:
subject = """
This is som3 s@mpl3 text.
One possible sixteen letter word is abstractednesses. 2012 is not
a word as it does not contain any alphabetic charat3rs.
Unfortunately conventionalizations contains 20 characters.
"""
import re
words = re.compile('((?<=\s)[A-Za-z]\w{2,15})\W', re.M)
res = words.findall(subject)
# res is:
# ['This', 'som3', 'text', 'possible', 'sixteen', 'letter', 'word',
# 'abstractednesses', 'word', 'does', 'contain', 'alphabetic',
# 'charat3rs', 'Unfortunately', 'contains', 'characters']