【问题标题】:REGEX - Extracting a 9 digit value between 2 positive lookbehinds using Regex正则表达式 - 使用正则表达式在 2 个正向后查找之间提取 9 位值
【发布时间】:2022-01-14 15:43:48
【问题描述】:

我正在尝试提取出现在后视值(Form & FMLA)之间的 9 位数字。这是我用来定位我的后视的逻辑:(?。我可以添加另一个部分来提取 9 位数字吗?任何帮助将不胜感激。谢谢!

表格(适用于请假病假) 请勿将本文件与您最初的请假申请一起退回。 请在预计复工日期前 5 - 7 天通过电子邮件或传真将此文件发送至人力资源服务中心。

第一部分:由员工填写 员工姓名:员工职位:员工 ID;位置/商店# James Doe Garden Associate 123456789 第二部分:由治疗该员工/患者的医疗保健提供者填写:您的患者目前正在休假。 完整、完整地回答所有适用的部分。 有几个问题寻求对病情、治疗等的频率或持续时间的回答。 您的答案应该是您根据您的医学知识 1、经验和对患者的检查得出的最佳估计。 尽可能具体;诸如“生命周期”、“”或“不确定”之类的术语可能不足以确定 FMLA 覆盖范围。

【问题讨论】:

  • 喜欢(?s)Form.*?\K\d{9}(?=.*?FMLA)?见demo
  • .NET 框架不支持 \K,所以当我在正则表达式中输入它时,它会出错。还有其他想法吗?

标签: .net regex


【解决方案1】:

您可以将此构造添加到您的正则表达式中以匹配 9 个连续数字:

([0-9]{9})

0-9 表示 0 到 9 之间的任何数字
大括号中的9 表示重复前 9 次

最终的正则表达式应该是:

(?<=Form)([\S\s]*)([0-9]{9})(?<=FMLA)

【讨论】:

  • 我应该在哪里添加它?我试着把它放在最后和中间,但它不起作用。在添加之前我需要省略一些东西吗?感谢您的帮助!
  • @KelvinLester 查看我编辑的答案
  • 谢谢,但这仍然不起作用。我收到以下错误:您的正则表达式与主题字符串不匹配。我的测试数据中没有找到 9 位数字。您是否尝试过使用您在正则表达式测试字符串中提供的逻辑?
  • @KelvinLester,我不是开发人员,也没有 .NET 环境。并且不知道如何测试它(在.NET中)
  • 没问题,感谢您的回复。
【解决方案2】:

你可以使用

(?s)(?<=Form.*?)\d{9}(?=.*?FMLA)

如果您需要确保九位子字符串中没有其他数字,请使用

(?s)(?<=Form.*?)(?<!\d)\d{9}(?!\d)(?=.*?FMLA)

请参阅.NET regex demo详情

  • (?s) - 一个 RegexOptions.Singleline 内联修饰符标志,使 . 跨行边界匹配
  • (?&lt;=Form.*?) - 一个积极的向后看,需要From,然后是任何零个或多个字符,尽可能少,紧挨当前位置的左侧
  • \d{9} - 九位数字
  • (?=.*?FMLA) - 正向前瞻,需要任何零个或多个字符,尽可能少,然后是 FMLA 子字符串。

【讨论】:

  • 感谢这完美的工作!!!另外,由于我的团队使用 .NET 框架,我将开始使用 .NET Regex Storm。使用此逻辑时,其他正则表达式测试工具没有带回匹配项。
  • @KelvinLester 您可以使用任何正则表达式测试器来构建模式,但您需要在.NET 兼容的正则表达式测试器上测试有效性。 regexhero.net/tester/ 也是一个不错的工具。
  • 太棒了,谢谢分享!!!
猜你喜欢
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多