我想确保使用正则表达式确保字符串格式为“ 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")
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用。我不确定我缺少什么,这里的问题是我不检查空格,制表符和换行符,也不对十进制前后的整数进行硬编码。
使用{m,n}可以指定图案可重复的次数,并且\d字符类匹配所有数字。该\S字符类匹配任何是不是空白。使用这些正则表达式可以简化为:
re.compile(r'\d{2,3}\.\d{2,3}-A\d-\S*\Z')
Run Code Online (Sandbox Code Playgroud)
还要注意\Z锚点,使\S*表达式一直匹配到字符串的末尾。此处不允许使用空格(换行符,制表符等)。如果将此与.match()方法结合使用,则可以确保测试字符串中的所有字符均符合该模式,仅此而已。见search()与match()有关的更多信息.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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3568 次 |
| 最近记录: |