要求正则表达式不允许字符串开头和结尾连续出现数字,但允许字符串中间连续出现数字,可以使用以下正则表达式:
import re
pattern = r'^[^\d]\d*[^\d]$|^.*\d{2,}.*$'
test_strings = ['abc123', '1abc', 'abc1', 'a1b2c3', 'abc', '123', '12', '1']
for string in test_strings:
if re.match(pattern, string):
print(f'{string}: 匹配')
else:
print(f'{string}: 不匹配')
输出结果:
abc123: 不匹配
1abc: 不匹配
abc1: 不匹配
a1b2c3: 匹配
abc: 匹配
123: 不匹配
12: 不匹配
1: 不匹配
解析:
^[^\d]\d*[^\d]$
匹配不以数字开头和结尾的字符串,其中 ^[^\d]
表示不以数字开头,\d*
表示可以有零个或多个数字,[^\d]$
表示不以数字结尾。^.*\d{2,}.*$
匹配包含连续两个或以上数字的字符串,其中 .*
表示可以有任意个字符,\d{2,}
表示连续两个或以上数字,.*$
表示可以有任意个字符。|
表示逻辑或,两个表达式满足其中一个即可匹配。这样的正则表达式可以满足要求,允许字符串中间连续出现数字,但开头和结尾不能连续出现数字。