regex - Python:我的正则表达式在某些字符串情况下不匹配
问题描述
我尝试创建一个正则表达式,到目前为止我编写了以下代码:
(-?['0|1']{1}.[00000000e+00| ]?){1}\s(-?['0|1']{1}.[00000000e+00| ]?){1}
我的目标是检测模式({string pattern}{blank}{string pattern})
。
这是我的字符串模式:
'0'
'-0.'
'1.'
'-1.'
'1.00000000e+00'
'0.00000000e+00'
'-0.00000000e+00'
'-1.00000000e+00'
'0. ' (The blanks can be at least 1 to 8 characters long.)
'-0. ' (The blanks can be at least 1 to 8 characters long.)
'1. ' (The blanks can be at least 1 to 8 characters long.)
'-1. ' (The blanks can be at least 1 to 8 characters long.)
我的代码在测试用例中大多是成功的,但在某些测试用例中会出现问题。(例如,'00000000e+00' 或 ' ' 发生错误)
特别是对我来说太难了,因为至少可以有 1 到 8 个空白(' '
)字符。
这是我的测试用例:
['0. 0.']
['0. 1.']
['1. 0.']
['1. 1.']
['-0. -0.']
['-0. 0.']
['0. -0.']
['1. -0.']
['1. -1.']
['-1. 1.']
['-1. -1.']
['-1.00000000e+00 0.'] # Fail
['0. -1. '] # Fail
['0. 0. '] # Fail
['-0.00000000e+00 1.00000000e+00'] # Fail
['-0. 1.00000000e+00'] # Fail
请给我一些建议。
解决方案
显然你有两个错误的印象。
您似乎将其
[
]
视为一个组构造,而它表示一个字符类。您似乎认为您必须在模式中包含分隔引号的字符串。
由于您可以将您的问题解释为您想要测试两个数字 -1、0 或 1,而其他人已经给出了正则表达式答案,因此这里有一个针对该问题的无正则表达式替代方案:
test = ['0. 0.', '0. 1.', '1. 0.', '1. 1.', '-0. -0.', '-0. 0.', '0. -0.', '1. -0.',
'1. -1.', '-1. 1.', '-1. -1.', '-1.00000000e+00 0.', '0. -1. ', '0. 0. ',
'-0.00000000e+00 1.00000000e+00', '-0. 1.00000000e+00', 'x y', '-1 0 1']
for t in test:
print([t], end='\t')
s = t.split()
try:
if len(s) != 2: raise ValueError
for f in s:
g = float(f)
if g!=-1 and g!=0 and g!=1: raise ValueError
except ValueError:
print('Fail')
else:
print('Pass')
推荐阅读
- heroku - 413Request Entity Too Large using Spring cloud routing
- asp.net-core-webapi - NetCore 3.1 ApiController routes 404 on IIS server but not while debugging locally
- flutter - Why am I getting Error while updating the flutter sdk?
- xcode - Xcode 11.5/Catalina not responding on startup
- sql - Oracle 案例报表查询
- python-3.x - 为什么对 Python 3.8.3 禁用 unittest 覆盖?
- dart - 来自 Exercism 的测试解决方案
- datalife-engine - 如何在 datalife 引擎模板文件中使用 php 脚本?
- android - 录制视频和音频 ARCore iOS SDK
- c++ - “资源脚本”像文件夹一样打开?