任何字符串的正则表达式代码,包含两个字母和数字,可能还有下划线和短划线

时间:2014-07-15 18:07:40

标签: regex ms-word

我的正则表达式知识非常有限,但我正在尝试编写/查找将捕获文档中以下字符串类型的表达式:

DO匹配:

  • ADY123
  • AD12ADY
  • 1HGER_2
  • 145-DE-FR2
  • Bicycle1
  • 2Bicycle
  • 128D
  • 128878P

不匹配:

  • 自行车
  • 183-329-193
  • 3123123

这样的表达可能吗?基本上,它应该找到包含字母和数字的任何字符串,无论字符串是否包含短划线或下划线。我可以使用以下两个正则表达式找到前两个:

  • /([A-Z] [0-9])\ W + /克
  • /([0-9] [A-Z)\ W + /克

但是搜索可能的短划线和连字符会使它更复杂......

感谢您提供的任何帮助! :)

更多信息:

我在以下方面取得了一些进展:([A-Z | a-z] [0-9] + - * _ * \ w +)但它不会捕获带有多个连字符的字符串。

我有一个包含大量文本字符串和数字字符串的文档,我不想捕获它们。我想要的是任何产品代码,可以是带或不带连字符和下划线的任何长度字符串,但总是包含至少一个数字和至少一个字母。

1 个答案:

答案 0 :(得分:4)

您可以在不区分大小写的模式下使用以下表达式:

\b((?:[a-z]+\S*\d+|\d\S*[a-z]+)[a-z\d_-]*)\b

说明:

\b                   # Assert position at a word boundary
(                    # Beginning of capturing group 1
  (?:                # Beginning of the non-capturing group
    [a-z]+\S*\d+     # Match letters followed by numbers
    |                # OR
    \d+\S*[a-z]+     # Match numbers followed by letters
  )                  # End of the group
  [a-z\d_-]*         # Match letter, digit, '_', or '-' 0 or more times
)                    # End of capturing group 1
\b                   # Assert position at a word boundary

Regex101 Demo

相关问题