【发布时间】:2017-02-20 15:33:17
【问题描述】:
大学的课程名称通常分为两个不同的部分,“部门”和“课程编号”
以英语 101 为例。
我的目标是编写一个与模式匹配的正则表达式,其中包含允许我指定查看前半部分还是后半部分的组。
问题在于,并非所有大学都对这些内容使用相同的格式。以下是我在其他大学遇到的“奇怪的东西”的 3 个测试用例。
1250-101
ENGLISH101
ENG|101-L
我写了 2 个正则表达式,一个处理所有奇怪的数字和奇数字符,一个处理从字母到数字的变化。但我无法想出一种方法让他们彼此很好地玩耍。我在下面复制了它们。
SELECT REGEXP_SUBSTR('ENGLISH101','(^\D*)(\d*)',1,1,NULL,1) FROM DUAL;
ENGLISH
SELECT REGEXP_SUBSTR('ENGLISH101','(^\D*)(\d*)',1,1,NULL,2) FROM DUAL;
101
SELECT REGEXP_SUBSTR('ENG|101-L','^(\w*)[\|/, \\-](.*)',1,1,NULL,1) FROM DUAL;
ENG
SELECT REGEXP_SUBSTR('ENG|101-L','^(\w*)[\|/, \\-](.*)',1,1,NULL,2) FROM DUAL;
101-L
所以这很好。但我不知道如何结合起来给我一个单一的正则表达式,这将使我能够根据分组获得英语(或其他任何东西)或 101。或者也许分组是导致这种头痛开始的原因?
或者,正则表达式一直都是错误的方法,我是否应该编写一个函数来逐个字符地遍历字符串并自己拆分它们?这似乎效率低下,但在这一点上我想我应该问这个问题。
对此的任何建议或见解将不胜感激。
【问题讨论】: