使用正则表达式查找带空格的数字

时间:2018-07-30 16:18:24

标签: sql regex oracle numbers whitespace

我需要在Oracle SQL中使用regex_count(无\b可用)  并且我需要计算一个字符串中的值(格式为(\d{1,}[a-zA-Z]{0,2})(例如123123a34bc,而不是32abc)其他(或其他噪音)至少一个空格,例如

'34 64 84' - should count to 3
'34 fh84h d88f 34 ' - should count to 2
'a54. 374 4/5' - should count 1
'5,5' - should count 0
'10a' - should count 1
'20g 32lf 43vnd kf34ld' - count 2
'9A_10' - counts 0

类似的东西。

(^|\s|\b)(\d{1,}[a-zA-Z]{0,2})($|\s)-但是在Oracle SQL中这些不是\b,而且我不确定它是否有效。

有人提出建议吗?

1 个答案:

答案 0 :(得分:4)

我建议复制每个空格并添加开头/结尾空格,然后运行简单的(^|\s)<YOUR_PATTERN>($|\s)模式:

SELECT REGEXP_COUNT(' ' ||  REGEXP_REPLACE('a54. 374 4/5', '(\s)', '\1 ') || ' ',  '(^|\s)\d+[a-zA-Z]{0,2}($|\s)') FROM DUAL

详细信息

  • ' ' ||-添加领先空间
  • REGEXP_REPLACE('a54. 374 4/5', '(\s)', '\1 ')-匹配并捕获所有空白,并用其自身加上空格替换
  • || ' '-添加尾随空格。

现在,运行(^|\s)\d+[a-zA-Z]{0,2}($|\s)正则表达式时您的计数将是正确的(请注意+等于{1,})。

  • (^|\s)-字符串的开头,空格
  • \d+-1个以上数字
  • [a-zA-Z]{0,2}-0到2个字母
  • ($|\s)-字符串或空格的结尾。