我想确保使用正则表达式,字符串格式为“999.999-A9-Won”,并且没有任何空格或制表符或换行符。
示例:87.98-A8-abcdef
我到现在为止的代码是:
testString = "87.98-A1-help"
regCompiled = re.compile('^[0-9][0-9][.][0-9][0-9][-A][0-9][-]*');
checkMatch = re.match(regCompiled, testString);
if checkMatch:
print ("FOUND")
else:
print("Not Found")
这似乎不起作用。我不确定我缺少什么,这里的问题是我不检查空格,制表符和换行符,也硬编码十进制前后整数的数字。
答案 0 :(得分:4)
使用{m,n}
,您可以指定模式可以重复的次数,\d
字符类匹配所有数字。 \S
字符类匹配不空格的任何内容。使用这些正则表达式可以简化为:
re.compile(r'\d{2,3}\.\d{2,3}-A\d-\S*\Z')
还注意\Z
锚点,使\S*
表达式一直匹配到字符串的末尾。这里不允许有空格(换行符,制表符等)。如果将它与.match()
method结合使用,可以确保测试字符串中的所有字符都符合该模式,仅此而已。有关.match()
。
search()
vs. match()
小型演示:
>>> import re
>>> pattern = re.compile(r'\d{2,3}\.\d{2,3}-A\d-\S*\Z')
>>> pattern.match('87.98-A1-help')
<_sre.SRE_Match object at 0x1026905e0>
>>> pattern.match('123.45-A6-no whitespace allowed')
>>> pattern.match('123.45-A6-everything_else_is_allowed')
<_sre.SRE_Match object at 0x1026905e0>
答案 1 :(得分:2)
让我们来看看你的正则表达式。如果你想:
“0到9”范围内的2或3个数字
然后你不能用'^[0-9][0-9][.]
开始你的正则表达式,因为它只会在开头只匹配两个整数的字符串。你的正则表达式的第二个问题在最后:[0-9][-]*
- 如果你想匹配字符串末尾的任何内容,那么你需要用.*
来完成正则表达式。 编辑:请参阅Martijn Pieters关于正则表达式中空白的答案。
这是一个更新的正则表达式:
testString = "87.98-A1-help"
regCompiled = re.compile('^[0-9]{2,3}\.[0-9]{2,3}-A[0-9]-.*');
checkMatch = re.match(regCompiled, testString);
if checkMatch:
print ("FOUND")
else:
print("Not Found")
并非所有内容都需要包含在[
和]
中,特别是当您知道要匹配的字符(例如-A
部分)时。此外:
{m,n}
表示:至少匹配m
次,最多n
次,\.
的原因。