【问题标题】:REGEX getting specific string and numbering正则表达式获取特定的字符串和编号
【发布时间】:2021-11-19 18:10:35
【问题描述】:

我有以下 txt 文件:

VIII.  LOCATIONS:  OLA Handbook 1300.8, OPEN ARMS
                OLA Handbook 1300.21, BIG BROTHER
                

9.  RESTAURANTS:  ARBYS 22RX-60-81, same subject, dated March 20, 2018.

但我想在任何地方匹配 OLA 手册及其后面的数字。但也要在 Locations 部分下(所以LOCATIONS: 后面的文字)

例如,预期的输出是: 我怎样才能在正则表达式中做到这一点?

 OLA Handbook 1300.8
 OLA Handbook 1300.21

到目前为止,我只做过

(?=LOCATIONS).*$

但我很困惑如何继续。

我正在使用https://regex101.com/ 来测试我的字符串,txt 文件来自记事本++。

【问题讨论】:

  • 你能解释一下这个正则表达式的作用吗?
  • 您能详细介绍一下“(\d*\.?\d+)”,每个单独的正则表达式语句在这里做什么吗?
  • 你的模式中有LOCATIONS,应该存在吗?
  • @Thefourthbird 是的,包含在“位置”部分下的解决方案将是首选解决方案
  • @Eisen 您正在使用 regex101 作为测试模式的正则表达式工具。但我的意思是你使用的是编程语言还是记事本++之类的工具?

标签: regex notepad++


【解决方案1】:

在 notepad++ 中,您可以利用 \G 锚点来获得连续匹配。

(?s)(?:\bLOCATIONS:|\G(?!^)).*?\b\KOLA\s+Handbook\s+\d+(?:\.\d+)\b

部分模式匹配:

  • (?s) 内联修饰符,点匹配换行符
  • (?:非捕获组
    • \bLOCATIONS: 字面匹配,前面有一个单词边界以防止部分匹配
    • |或者
    • \G(?!^)在上一场比赛结束时断言位置,而不是在那个开始
  • )关闭非捕获组
  • .*? 匹配尽可能少的字符
  • \b\K 一个字边界,然后使用\K 清除当前匹配缓冲区(忘记匹配到现在)
  • OLA\s+Handbook\s+ 匹配文本,其中\s+ 匹配 1 个或多个空白字符
  • \d+(?:\.\d+)\b 匹配 1+ 个数字和一个可选的小数部分和一个单词边界

Regex demo

【讨论】:

    【解决方案2】:

    你有没有试过这个枯竭的代码?

    查找:(ola.*\d)|.?
    全部替换:$1

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      相关资源
      最近更新 更多