如果倒数第五个字符是非字母字符,我正在尝试制作一个匹配的正则表达式。到目前为止,我还没有成功。虽然我做了一个如下:
.*[a-zA-Z]{5,}$
这将检查字符串末尾是否有五个或更多字母。但我想要相反的。仅当字符串末尾的字母少于五个时,正则表达式才会匹配。
这将做到:
[^a-zA-Z].{4}$
解释:
[^a-zA-Z] = match anything except alphabets
.{4} = any 4 characters
$ = end of string
编辑:
正如评论者所建议的那样,您可以使用 regex [a-zA-Z]{,4}$
。在这种情况下,{,4}
匹配不超过 4 个前面的表达式。所以它匹配不超过 4 个字母字符。
要匹配任何字符串末尾不包含 4 个连续字母字符的字符串,您可以简单地使用此正则表达式:
>>> import re
>>> r=re.compile('(?![a-zA-Z]{4}$).{4}$')
>>> r.search('hello.com')
<_sre.SRE_Match object at 0xb759cdb0>
>>> r.search('hellobcom')
>>>
>>> r.search('hello.ca')
<_sre.SRE_Match object at 0xb759cdb0>
正则表达式的解释(?![a-zA-Z]{4}$).{4}$
:
(?!
意味着开始一个否定的前瞻(仅当内容不匹配时才()
匹配) 。
[a-zA-Z]{4}
匹配字母表中的任意 4 个字符。
$
是行的结尾。
)
是负前瞻组的结束。
.{4}
匹配任意 4 个字符。
$
是行的结尾。