0

如果倒数第五个字符是非字母字符,我正在尝试制作一个匹配的正则表达式。到目前为止,我还没有成功。虽然我做了一个如下:

.*[a-zA-Z]{5,}$ 

这将检查字符串末尾是否有五个或更多字母。但我想要相反的。仅当字符串末尾的字母少于五个时,正则表达式才会匹配。

4

2 回答 2

2

这将做到:

[^a-zA-Z].{4}$

解释:

[^a-zA-Z] = match anything except alphabets
.{4} = any 4 characters
$ = end of string
于 2013-04-19T15:57:49.933 回答
0

编辑:

正如评论者所建议的那样,您可以使用 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 个字符。
$是行的结尾。

于 2013-04-19T16:33:46.430 回答