【问题标题】:RegEx for finding strings with chars and numbers用于查找带有字符和数字的字符串的正则表达式
【发布时间】:2019-09-24 12:39:35
【问题描述】:

我正在尝试匹配零件编号与普通文本混合的字符串。

这里有几个例子。

  1. 牵引控制 Ecu,Gl3t-19H378-Ac
  2. 总成、电源、测试 Gd、Priv-M50t3
  3. 左、后、棕褐色、电源、4DR、Mju1
  4. T-Case Ecu,56029590AE
  5. 右,盲点模块,284K0 9HS0F

在这些示例中,我尝试匹配。

  1. Gl3t-19H378-Ac
  2. Priv-M50t3
  3. Mju1
  4. 56029590AE
  5. 284K0 和 9HS0F

我在 .Net 中,这是我一直在使用的正则表达式。

(\b[a-zA-Z0-9][a-zA-Z0-9\-]{1,32}(\b|$)(?<=[0-9]))

如果匹配以数字结尾,它可以满足我的需要。我想要的规则是匹配单词边界之间的任何字符串,要么是所有数字,要么是数字和字符混合,但绝不只是字符。

【问题讨论】:

  • 你不想也匹配4DR吗?

标签: regex string regex-greedy


【解决方案1】:

应该这样做:

\b[a-zA-Z0-9-]*\d[a-zA-Z0-9-]*\b

如果您需要将长度限制为最大 32,请添加前瞻:

\b(?=[a-zA-Z0-9-]{1,32}\b)[a-zA-Z0-9-]*\d[a-zA-Z0-9-]*\b

如果下划线也可以,你可以用[\w-]代替[a-zA-Z0-9-]

【讨论】:

  • {,32} 可能在某些正则表达式中按字面意思解析,或者在某些其他风格中解析为 {0,33}。始终指定下限{0,32} 是有意义的。
  • @WiktorStribiżew 感谢您的指点(我从未使用过 .net)。但是,在这种情况下,它需要是 {1,32}
  • 是的,它仍然匹配 OP 未提及的 4DR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 2021-01-16
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多