我正在尝试创建一个正则表达式(.net)来匹配眼科中使用的一组特定数据,称为折射。此匹配的目的是从诊断设备读取串行数据并对其进行相应的解析。当存在缓冲区错误或只接收到部分读取时,我需要尝试并说明问题。
折射记录在三个部分: Sph,Cyl和Axis。SPH可以是正值或负值(总是用前面的+/-表示),通常写成##.##或#.##。cyl值可以是正的或负的(总是前面的+/-),也可以是相同的#/#.#格式)。最后是一个轴值,必须在0到360之间。
示例匹配值:
+ 0.00 + 0.50 74
+0.00+0.50x74
+1.25 -2.20 110
+14.50 -0.00 96示例不应该匹配值:
来自类似机器的通用表达式,这些表达式将输出不应该导致匹配的数据。
39.50 8.55 171
40.25 8.35 80
+ 0.50 DK 90
+ 1.25 125
+ 0.25* 109问题:
到目前为止我拥有的
[+-]+\s*([0-9]{1,2})+\.+([0-9]{1,2})+\s*[+-]\s*[0-9]{1,2}\.[0-9]{1,2}\s*[0-9]{1,3}我的似乎太复杂了。我也没有考虑x限定符。
编辑:终端数据转储为什么数据在某些情况下是不同的,我不确定,我只是有一些看起来不同的样本数据;相当旧的机器。
.
.HARK SEQ 2
.
.Sph Cyl Axis VA
RIGHT EYEObj
.+ 0.00 + 0.50 74
.
.Reflex: 58
.LEFT EYEObj
.+ 0.50 + 0.25 109
.
.Reflex: 34
.Vertex: 12.0
PD: 56
.
.Ker DK MM Axis
R 39.50 8.55 171
40.25 8.37 81
. AVG. 40.00 8.46
K + 0.75 DK x 81
.L 39.00 8.66 177
. 39.50 8.52 87
.
. AVG. 39.25 8.59
. K + 0.50 DK x 87
..发布于 2016-06-08 13:42:35
下面的正则表达式与您给出的样例模式相匹配,但是,如果为了减轻从新系统中添加的新模式的影响,则最好将匹配模式分解为3个表达式,而不是一个monolith。
[+-]{1}\s{0,1}[0-9.]+\s{0,1}[+-]{1}\s{0,1}[0-9.]+[\sx]{0,1}[0-9]+这是一个一些你可以摆弄的东西。
发布于 2016-06-08 13:47:56
最后一个数字可以在0到360之间的条件是很棘手的:)
无论如何,我测试了您的测试用例,这似乎是可行的:^[+-]\s*[\d]{1,2}\.[\d]{2}\s*[+-]\s*[\d]{1,2}\.[\d]{2}(?:x|\s*)(?:[\d]|[1-9][\d]|[1-2][\d][\d]|3[0-5][\d]|360)$
这里的工作示例:https://regex101.com/r/mH3zQ0/2
发布于 2016-06-08 15:15:32
这匹配所有您想要的项目,而不匹配您不想要的项目。试试看:
"[\+\-]\s*\d+\.\d+\s*[\+\-]\s*\d+\.\d+[\sx]+(\d{1,2}|[12]\d\d|3[012345]\d|360)\b"https://stackoverflow.com/questions/37703443
复制相似问题