【问题标题】:Extract middle part of string Teradata提取字符串 Teradata 的中间部分
【发布时间】:2022-01-13 21:27:03
【问题描述】:

我一直试图弄清楚为什么我在 Teradata 中的 REGEX 表达式有时但并非总是有效:我试图提取中间有模式的部分字符串:它以 ABC 开头,后跟 3 或 4数字。

select RegExp_Substr('X886782E-ABC2036-VACCINE COVID', '[ABC]+[0-9]+')

我的逻辑大部分时间都有效,但并非总是如此:它并不总是能识别以 ABC 开头并后跟 3-4 位数字的部分字符串。

【问题讨论】:

  • [ABC]+ 匹配一个或多个大写字母,每个'A''B''C',例如'CAA'。如果字符串必须始终跟随连字符,则您希望ABC[0-9]+(或ABC\d+)或\bABC[0-9]+ 阻止ZABC123'(?<=-)ABC[0-9]+ 的匹配。最后一个是积极的回顾。我不知道 Teradata 的正则表达式引擎是否支持lookbehinds。
  • 谢谢你,卡里。我已经尝试了所有这些选项,它们都有效。

标签: regex teradata


【解决方案1】:

在 Cary Stoveland 的帮助下,这些代码行中的任何一个都将帮助提取以 ABC 开头并后跟 3-4 位数字的字符串的中间部分:

select RegExp_Substr('X886782E-ABC2036-VACCINE COVID', 'ABC[0-9]+')
select RegExp_Substr('X886782E-ABC2036-VACCINE COVID', 'ABC\d+')
select RegExp_Substr('X886782E-ABC2036-VACCINE COVID', '\bABC[0-9]+')
select RegExp_Substr('X886782E-ABC2036-VACCINE COVID', '(?<=-)ABC[0-9]+')

【讨论】:

  • 如果您想要 3 或 4 位数字:\bABC[0-9]{3,4}
猜你喜欢
  • 2022-05-13
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
相关资源
最近更新 更多