0

我正在开发一个为地质学家制作地层柱的程序。地质学家使用 5 个参数对岩石单元进行编码:(1)岩性代码(2 个字符),(2)一级代码(1 个字符),(3)二级代码(1 个字符),以及(4)三级代码(1特点)。所以一个摇滚单元可以这样编码:

Ssxrs - 使其成为具有尖锐基础接触的生根和交叉层状砂岩。

很容易解析出 2 个字符、1 个字符、1 和 1。但地质学家有时会将岩石单元编码为:

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

Gr/Ss——砾岩和砂岩互层的地方。

他们可以多次执行此操作,例如:

Gr-Ss/Ls --- 砾岩向上分级为砂岩和石灰岩互层。他们不仅对岩性代码这样做,而且对一级、二级和三级代码也这样做。

我想将 5 个代码流和操作(即“/”和“-”)解析为岩性列表/数组、初级列表/数组、二级列表/数组和三级列表/数组。

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

4

1 回答 1

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])

他们将与第一个一样,但只有一个字母。

于 2012-12-12T15:56:32.177 回答