是否可以使用正则表达式解析此代码?

时间:2012-12-12 15:31:03

标签: regex vb.net

我正在研究一个为地质学家制作地层柱的计划。地质学家的岩石单元使用5个参数编码:(1)岩性代码(2个字符),(2)主要代码(1个字符),(3)次要代码(1个字符)和(4)第三级代码(1)字符)。所以摇滚单元可以编码如下:

Ssxrs - 使其成为有根和交叉层的砂岩,具有明显的基底接触。

很容易解析2个字符,1个字符,1和1.但是地质学家有时会像摇滚单元一样编码:

Gr-Ss ---单位从砾岩向上分级为砂岩,或

Gr / Ss--砾岩和砂岩互层。

他们可以多次这样做:

Gr-Ss / Ls ---其中一个砾岩向上分级为夹层砂岩和石灰岩。它们不仅用于岩性代码,还用于初级,二级和三级代码。

我想将5个代码流和操作(即" /"和" - ")解析为岩性列表/数组,主列表/数组,辅助列表/数组和第三列/数组。

这是一个正则表达式可解决的问题吗?

1 个答案:

答案 0 :(得分:1)

正则表达式:

((?:[A-Za-z]{2}[-\/])*[A-Za-z]{2})((?:[A-Za-z][-\/])*[A-Za-z])((?:[A-Za-z][-\/])*[A-Za-z])((?:[A-Za-z][-\/])*[A-Za-z])

将允许您在4个不同的组中找到4个不同的代码:http://rubular.com/r/Y7rlT09soH

一些解释: 第一次捕获组:

((?:[A-Za-z]{2}[-\/])*[A-Za-z]{2})

将捕获0次或更多次,2个字母后跟“ - ”或“/”,后跟2个字母。 (“?:”表示没有捕获组)

3下一个捕获组是相同的:

((?:[A-Za-z][-\/])*[A-Za-z])

它们将与第一个相同,但只有一个字母。

相关问题