1

我需要为一组可能的字符匹配测试正则表达式,

'TEST' 字段可以采用这些可能的值 - 'TEST1','TEST2','TEST3'...'TEST10'

import re
pattern = 'TEST[0123456789]
field = 'TEST1'

match = re.search(match,field)

如何在模式匹配中指定 [10] 的值?

4

2 回答 2

7

10是一个 2 字符的字符串:

r'TEST\d{1,2}'

将匹配一位或两位数字;\d匹配从 0 到 9 范围内的任何字符;它是 的简写形式[0123456789]

或者,使用两种替代方法:

r'TEST(?:\d|10)'

将允许1位数,将允许10. 请注意,它仍然会匹配,TEST11因为该字符串TEST1. 如果您想阻止它仍然匹配,请添加边界测试:

r'TEST(?:\d|10)\b'

最后一种模式的演示:

>>> re.search(r'TEST(?:\d|10)\b', 'TEST0').group()
'TEST0'
>>> re.search(r'TEST(?:\d|10)\b', 'TEST8').group()
'TEST8'
>>> re.search(r'TEST(?:\d|10)\b', 'TEST10').group()
'TEST10'
>>> re.search(r'TEST(?:\d|10)\b', 'TEST11') is None
True
于 2013-06-21T15:44:56.423 回答
1
TEST(?:[1-9]|10)\b

这修复了这里的其他答案没有解决的几个场景。

在行动:http ://www.rubular.com/r/0if2CHfa6l

于 2013-06-21T17:13:04.200 回答