提取授权号的正则表达式模式

2024-04-18

我在用着GSKinner 的 Reg Exr 工具 http://gskinner.com/RegExr/?帮助提出一种模式,可以在包含大量其他垃圾的字段中找到授权号。授权号是一个包含字母(有时)、数字(始终)和连字符(有时)的字符串(i.e.授权始终在某处包含数字,但并不总是包含连字符和字母)。此外,授权号可以位于我正在搜索的字段中的任何位置。

正确授权号的示例包括:

 5555834384734  ' All digits
 12110-AANM     ' Alpha plus digits, plus hyphens
 R-455545-AB-9  ' Alpha plus digits, plus multiple hyphens
 R-45-54A-AB-9  ' Alpha plus digits, plus multiple hyphens
 W892160        ' Alpha plus digits without hypens

下面是一些带有额外垃圾的示例数据,这些垃圾有时会用连字符或不带空格附加到真实的授权号后面,使其看起来像是数字的一部分。垃圾以可预测的形式/单词出现:REF、CHEST、IP、AMB、OBV 和 HOLD,它们不是授权号的一部分。

 5557653700 IP
 R025257413-001
 REF 120407175
 SNK601M71016
 U0504124 AMB
 W892160
 019870270000000
 00Q926K2
 A025229563
 01615217 AMB
 12042-0148
 SNK601M71016
 12096NHP174
 12100-ACDE
 12110-AANM
 12114AD5QIP
 REF-34555
 3681869/OBV ONL

这是我正在使用的模式:

 "\b[a-zA-Z]*[\d]+[-]*[\d]*[A-Za-z0-9]*[\b]*"

我正在学习 RegExp,因此毫无疑问可以改进它,但它适用于上述情况,但不适用于以下情况:

 REFA5-208-4990IP  'Extract the string 'A5-208-4990'without REF or IP
 OBV1213110379     'Extract the string '1213110379' without the OBV
 5520849900AMB     'Extract the string '5520849900' without AMB
 5520849900CHEST   'Extract the string '5520849900' without CHEST
 5520849900-IP     'Extract the string '5520849900' without -IP
 1205310691-OBV    'Extract the string without the -OBV
 R-025257413-001   'Numbers of this form should also be allowed.
 NO PCT 93660      'If string contains the word NO anywhere, it is not a match
 HOLDA5-208-4990   'If string contains the word HOLD anywhere, it is not a match

有人可以帮忙吗?

出于测试目的,下面的 Sub 创建了一个包含示例输入数据的表:

 Sub CreateTestAuth()

 Dim dbs As Database
 Set dbs = CurrentDb

 With dbs
     .Execute "CREATE TABLE tbl_test_auth " _
         & "(AUTHSTR CHAR);"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('5557653700 IP');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "(' R025257413-001');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('REF 120407175');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('SNK601M71016');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('U0504124 AMB');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('3681869/OBV ONL');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('REFA5-208-4990IP');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('5520849900AMB');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('5520849900CHEST');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('5520849900-IP');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('1205310691-OBV');"
     .Execute " INSERT INTO tbl_test_auth " _
         & "(AUTHSTR) VALUES " _
         & "('HOLDA5-208-4990');"
     .Close
 End With
 End Sub

好吧,一开始我以为额外的要求会让正则表达式a lot longer.
但从积极的角度来看,它实际上几乎是相同的大小。这次只有正则表达式:
\b(?=.*\d)([a-z0-9]+(?:-[a-z0-9]+)*)\b

或用注释细分(忽略空格):

\b                     # Word start
  (?=.*\d)             # A number has to follow somewhere after this point
  (                    # Start capture group
    [a-z0-9]+          # At least one alphanum
    (?:-[a-z0-9]+)*    # Possibly more attached with hyphen
  )                    # End capture group
\b                     # Word end

但请注意,并非所有正则表达式风格都支持可变宽度前瞻。我不知道 VBA 的情况。

第二个注意事项:(?=)如果数字出现在单词结尾之后,thingy 也会满足。所以在
不要认出我但是-1-5ay-是的
粗体部分将被捕获。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提取授权号的正则表达式模式 的相关文章

  • 如何为 Imagus 悬停缩放扩展开发自定义过滤器?

    当我读到关于悬停缩放是邪恶的 http www reddit com r YouShouldKnow comments 1wjrc8 ysk that the hover zoom extension is spyware 哎呀 有两篇文章
  • 使用基于 DFA(线性时间)正则表达式捕获组:可能吗?

    是否可以使用基于 DFA 的正则表达式实现捕获组 同时保持相对于输入长度的线性时间复杂度 直觉上我认为不是 因为子集构造过程不知道它可能落在哪个捕获组内 但这是我第一次意识到这可能是一个潜在的问题 所以我不知道 是否可以使用基于 DFA 的
  • Java正则表达式:为什么数字[0-9]、逗号等不是unicode?

    class Test public static void main String args String regex p L System out println 0 matches regex 上面的代码打印 false 但我期待 tr
  • Java:正则表达式排除空值

    在问题中here https stackoverflow com questions 51359056 java regexp for a separated group of digits 我得到了正则表达式来匹配 1 到 99 之间的一
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an
  • 如何让 Vim 突出显示非 ascii 字符?

    我试图让 Vim 突出显示非 ASCII 字符 是否有可用的设置 正则表达式搜索模式或插件来执行此操作 在 a 中使用范围 搜索中的字符类 您应该能够excludeASCII 十六进制字符范围 因此突出显示 假设您有hlsearch启用 所
  • 日期 (yyyy/MM/dd) 或年份 (yyyy) 的正则表达式验证器

    我想要正则验证表达式来验证仅输入年份 yyyy 或日期 yyyy MM dd 它不得接受 21 23323 它应该接受任何四位整数值 例如 2012 并且还应该仅接受年份 yyyy MM dd 格式 您不需要为此使用正则表达式 我会用Dat
  • mysql 详细查询字符串,如通配符

    不知道如何标题我的问题 哈哈 下面是我需要的 我的数据库中的值如下所示 test example 1 test example 2 test example TD 1 这些值的长度可以不同 test example 只是一个示例 某些值将具
  • 正则表达式查找数字后跟字母[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我是正则表达式的新手 所以对愚蠢的问题表示歉意 如何识别字符串包含数字后跟字母 例如 在这个地址中 Flat 3a Butterfly St
  • 替换C#字符串中的数字

    我正在尝试使用正则表达式对字符串进行一些工作 但遇到了一些困难 我的目标是用字符替换字符串中的数字 特别是如果字符串中有一组数字 我想用一个字符替换整个数字组 如果只有一个数字 我想将其替换为 例如 如果我有字符串 test12345 tx
  • Emacs 正则表达式:什么 \< 和 \> 可以做 \b 不能做的事情?

    正则表达式反斜杠 GNU Emacs 手册 http www gnu org software emacs manual html node emacs Regexp Backslash html说 lt 匹配单词的开头 gt 匹配单词末尾
  • 当找到匹配时使用 sed 替换行首

    我有一个 Java 文件 我想注释包含匹配的任何代码行 myvar 我认为 sed 应该在这里帮助我 sed s myVar not sure what to put here g MyFile java 我不知道要输入什么 not sur
  • 将 CURL 命令行转换为 VBA

    在 CURL 中 我可以使用这一行 curl data DataToBeSent https example com resource cgi 我正在努力将此类行转换为在 VBA 中使用 这是我到目前为止的尝试 Sub POST Metho
  • 如何在VBA中将文本文件读取到数组中

    我正在尝试将制表符分隔的文本文件提取到数组中 我已经知道如何将该文本文件读入电子表格中 以下是我的代码 它运行良好 While Not EOF iFile Line Input iFile LineText Dim arr arr Spli
  • 如何使用Excel的墨迹工具添加手写签名?

    我想在我公司的一些表格中添加手写数字签名 目标是选择一个文档 添加签名 通过使用绘图板 这可以使用 Excel 的墨水工具完成 并将文件作为 PDF 存储在服务器中 这将消除打印然后扫描表格以获得签名的必要性 我使用 Excel 作为文件操
  • 用于验证网络路径的正则表达式 PHP、jQuery、JavaScript、Ruby

    尝试找出用于验证网络路径的正则表达式 即 comp xyz or comp or comp x y z storage或者所有部分都更长的东西 但希望能够传达其要点 我目前拥有的是一个简单的输入字段 用户可以通过它传递信息 事情是我不希望他

随机推荐

  • 如何使用语义和干净的 HTML、CSS 来制作不均匀的文本换行(不是方形或圆形)?

    如何使用语义和干净的 HTML CSS 进行这样的文本换行 与所有浏览器兼容 添加不同的类 p 如果没有其他解决方案 这是我想到的唯一解决方案 但这样每次客户都无法更改类 这是缺点 您可以将图像设置为背景 p p 然后将透明容器以您不希望文
  • SAS 全球日期比较

    我正在尝试进行日期比较 但没有得到正确的结果 有谁知道发生了什么事吗 macro ttt let check start 28APR2014 if check start d lt 25may2014 d then let true 1 e
  • 如何使 multer 正确解析使用表单数据发送的客户端请求?

    我想将数据从客户端传输到双方都使用的服务器计算机Node js 在客户端我正在使用库axios and form data 在我正在使用的服务器上express and multer 我正在使用的客户端代码如下 const FormData
  • MarkerView 走出图表以获取图表上的最后一个点

    我正在使用 MarkerView 类在图表中显示标记视图 我创建的标记视图布局包含两个文本视图 一个在另一个下面 我面临的问题是图表上最后一点的标记视图一半在图表内 一半在图表外 下面两张图清楚地说明了问题 第一张图片显示了图表中心点的标记
  • 通过在 MATLAB 中填充当前值来扩展数组

    我有一个相当简单的问题 我只是想知道在 MATLAB 中是否有一种简单的方法可以做到这一点 即一个函数来完成此任务 而不是自己编写循环或其他东西 假设我有一个时间序列 其中 Time 是1 1 1000和数据是2 1 1 1000 我想通过
  • 如何在不使用依赖注入的情况下模拟另一个包中的函数?

    有点像 golang 初学者 但我以前曾使用过测试框架 如何在不注入依赖项的情况下模拟和伪造依赖方法返回的内容 我不想使用依赖项注入的原因是因为正在使用许多外部包方法 并且在构造函数中注入所有方法很麻烦 我已经在线 stackoverflo
  • phpmyadmin 中令人讨厌的警告[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 每次我登录 phpMyAdmin 时 我都会在红色框中收到一条恼人的警告消息 我已经卸载了 xampp 然后再次安装了几次 我删除
  • Google_maps_flutter 在 iOS 中不显示缩放和路线按钮

    在 IOS 中使用 google map flutter api 时 不会显示缩放和路线按钮 当点击地图上的任何位置时 这些按钮会在 Android 中显示 但是 IOS 中不存在相同的行为 我希望这些按钮在 IOS 中也可用 IOS 中仅
  • 使用MSBuild与VS2017构建SSDT项目失败

    我正在尝试在我们的 Windows Server 2016 服务器上设置 sqlproj SSDT 项目的持续集成 为此 我在服务器上安装了 VS2017 和 SSDT 工具以获得所需的工具 我还安装了 MS build tools 201
  • 嵌套形式和 habtm

    我正在尝试保存到 habtm 关系中的联接表 但遇到问题 在我看来 我传递的组 ID 为 User model user rb class User lt ActiveRecord Base has and belongs to many
  • 配置HttpClientFactory时证书错误

    我需要添加证书HttpClientFactory 旧的实现与HttpClient看看这个 var cookieContainer new CookieContainer var handler new HttpClientHandler C
  • 如何将一列中的文本拆分为多行

    我正在处理一个大型 csv 文件 倒数第二列有一个文本字符串 我想用特定分隔符分割它 我想知道是否有一种简单的方法可以使用 pandas 或 python 来做到这一点 CustNum CustomerName ItemQty Item S
  • 使用 ASP.NET 4.5 应用程序中需要 WS-Security 的 Web 服务

    我需要使用一个 Web 服务 该服务需要基于 ASP NET 4 5 应用程序的 X 509 证书的 WS Security 到目前为止 我已经创建了 Web 参考 但我不知道如何实现 WS Security 我获得证书没有问题 但我不知道
  • svn 可以提供哪些报告?

    我们正在迁移到 SVN 对我们来说不幸的是 我们会定期接受审核 审核员需要以下信息 文件更改历史记录SVN访问历史添加了新文件文件的变化 是否有一个工具可以为我们生成这些报告 或其中一些报告 StatSVN是一个轻量级的颠覆报告生成器 ht
  • 如何使用jquery获取动态创建的没有Id的子元素的高度

    我有一个 div 它总是动态加载两个图像 并且可能在中间加载一个 div 图像或 div 都没有与之关联的 id 而且我不能让它们有 id 用萤火虫检查它们 它们只是显示为 img and div 我需要获取这个子 div 存在时的高度 我
  • 打印用户输入的两个最高值

    我有一个作业 我必须编写一段代码 让用户决定要写入的 int 值的数量 然后决定这些值应该是什么 用户必须至少有 2 个输入 然后程序将比较输入的值 然后打印出两个最高值 到目前为止 我设法打印出最高的值 但我不确定我的做法有什么问题 因为
  • Chrome 更新破坏了我的滚动子菜单

    在 Windows 和 Osx 中将 Chrome 更新到版本 56 它破坏了我的滚动子菜单 如果我用鼠标滚轮滚动 滚动操作就会起作用 但是如果我将鼠标指针悬停在滚动条上 子菜单就会关闭 我使用以下 css 来滚动子菜单 ul scroll
  • 如何将所有text_node节点值的一部分包装在html元素中?

    我正在迭代 html 文档中的所有文本节点 以便用特定的范围包围一些单词 改变nodeValue不允许我插入 html 这span被转义以纯文本显示 我不希望这样 这是我到目前为止所拥有的 var elements document get
  • 我无法在react-dom/client中使用createRoot函数

    import React from react import as ReactDOMClient from react dom client import App from App import reportWebVitals from r
  • 提取授权号的正则表达式模式

    我在用着GSKinner 的 Reg Exr 工具 http gskinner com RegExr 帮助提出一种模式 可以在包含大量其他垃圾的字段中找到授权号 授权号是一个包含字母 有时 数字 始终 和连字符 有时 的字符串 i e 授权