【问题标题】:regular expression for exact number in a numerical string数字字符串中精确数字的正则表达式
【发布时间】:2017-06-12 03:17:50
【问题描述】:

我一直在尝试为以下问题创建正则表达式:

A) 标准杆 乙) 1234

给定上面的字符串 A 和 B,我想找到这些值按顺序出现的所有匹配项,而不考虑空格等,并遵循以下重要规则:

  1. 字符串 A 和 B 都不能作为另一个更大字符串的子字符串存在
  2. 给定的字符串 B 必须出现在 A 之后
  3. 给定的字符串 B 必须单独出现,而不是另一个数字的一​​部分

以下是一些潜在匹配示例:

  1. 标准杆1234
  2. 标准杆 1234
  3. 标准杆 5678, 1234
  4. PAR 9991234999, 1234
  5. PAR !@#-= 1234
  6. 标准杆1234-122
  7. PAR#1234-233
  8. 任何文本PAR#1234-233

但是,以下内容不应匹配:

  1. PART 1234 - PAR 是 PART 的子字符串
  2. APART 1234 - PAR 是 APART 的子字符串
  3. PAR 1234999 - 1234 是 1234999 的子字符串
  4. PAR 9991234 - 1234 是 9991234 的子字符串
  5. PAR 9991234999 - 1234 是 9991234999 的子串
  6. 1234 PAR - 1234 出现在 PAR 之前

不幸的是,我正在尝试在 oracle 中使用 REGEXP_LIKE 来执行此操作,但没有 \b

我试过了

\W*PAR\W*1234

但这与上述潜在匹配中的#3 不匹配。所以我尝试了许多适用于某些但不是全部的变体。

我想知道是否有一个表达式可以捕捉我想要完成的事情。任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 这行得通吗? PAR.*1234
  • 不完全是,因为这也会在不应该匹配的结果中返回#1-5

标签: regex regexp-like


【解决方案1】:

此解决方案使用\b 来检查word boundary.

\bPAR1234\b|\bPAR\b.*\b1234\b

在此处查看演示:https://regex101.com/r/SM8Bq1/2

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多