首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >眼科验光仪

眼科验光仪
EN

Stack Overflow用户
提问于 2016-06-08 13:09:11
回答 4查看 105关注 0票数 0

我正在尝试创建一个正则表达式(.net)来匹配眼科中使用的一组特定数据,称为折射。此匹配的目的是从诊断设备读取串行数据并对其进行相应的解析。当存在缓冲区错误或只接收到部分读取时,我需要尝试并说明问题。

折射记录在三个部分: Sph,Cyl和Axis。SPH可以是正值或负值(总是用前面的+/-表示),通常写成##.##或#.##。cyl值可以是正的或负的(总是前面的+/-),也可以是相同的#/#.#格式)。最后是一个轴值,必须在0到360之间。

示例匹配值:

代码语言:javascript
复制
+ 0.00 + 0.50 74
+0.00+0.50x74
+1.25 -2.20 110
+14.50 -0.00 96

示例不应该匹配值:

来自类似机器的通用表达式,这些表达式将输出不应该导致匹配的数据。

代码语言:javascript
复制
 39.50  8.55 171
40.25  8.35 80
+ 0.50 DK 90
+ 1.25 125
+ 0.25* 109

问题:

  • 当解析值时,在+/- (或否)之间可能有一个空白。
  • 在最后2组数字之间可能有一些空白,或者有些系统会以#x#格式输出它。
  • 第1和第2组数字集可以是#.##格式,也可以是##.##格式,该格式可以或不包括前导0。

到目前为止我拥有的

代码语言:javascript
复制
[+-]+\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限定符。

编辑:终端数据转储为什么数据在某些情况下是不同的,我不确定,我只是有一些看起来不同的样本数据;相当旧的机器。

代码语言:javascript
复制
.
.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
..
EN

回答 4

Stack Overflow用户

发布于 2016-06-08 13:42:35

下面的正则表达式与您给出的样例模式相匹配,但是,如果为了减轻从新系统中添加的新模式的影响,则最好将匹配模式分解为3个表达式,而不是一个monolith。

代码语言:javascript
复制
[+-]{1}\s{0,1}[0-9.]+\s{0,1}[+-]{1}\s{0,1}[0-9.]+[\sx]{0,1}[0-9]+

这是一个一些你可以摆弄的东西

票数 0
EN

Stack Overflow用户

发布于 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

票数 0
EN

Stack Overflow用户

发布于 2016-06-08 15:15:32

这匹配所有您想要的项目,而不匹配您不想要的项目。试试看:

代码语言:javascript
复制
"[\+\-]\s*\d+\.\d+\s*[\+\-]\s*\d+\.\d+[\sx]+(\d{1,2}|[12]\d\d|3[012345]\d|360)\b"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37703443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档