正则表达式查找匹配之前找到的第一个值

问题描述 投票:0回答:2

我有一个字符串值,并且由于字符串的填充方式(超出我的控制),我有 新行实例位于公司名称中间。

我想对特定的匹配项进行正则表达式替换以替换 有一个空格。

这是我输出的一个片段(它可以改变。但我试图将所有出现的情况与第一个匹配 它在日期之前找到。并提取它们之间的文本。

\nGBP*\nAA1234567 A random company name - I 03-Mar-2023 BUY 42.6400 42.6900 GBP 1,820.3016 1.0000 1,842.4400\nAA1234568 Another randon company name - H-M 03-Mar-2023 BUY 11.9880 845.6000 GBP 10,137.0528 1.0000 10,159.1700\nAA12345679 Third Party Utilies - Fund - Class\nAA-B Income\n03-Mar-2023 BUY 6.4120 836.9100 GBP 5,366.2669 1.0000 5,388.5200\nAA12345670 Company 4 - M 03-Mar-2023 BUY 205.6830 10.8500 GBP 2,231.6606 1.0000 2,253.7800\nAA2345678 Another random page up company - I 03-Mar-2023 BUY 66.3850 45.4400 GBP 3,016.5344 1.0000 3,038.6500\nASSET SCHEDULE\nPolicy Number     1234-56789\nAA2345679 Company 5 Utilities- M 03-Mar-2023 BUY 76.7370 13.7400 GBP 1,054.3664 1.0000 1,076.4900\nTotal

目前正在回归。

GBP*\nAA1234567 A random company name - I 03-Mar-2023
AA1234568 Another random company name - H-M 03-Mar-2023
AA12345679 Third Party Utilities - Fund - Class\nAA-B Income\n03-Mar-2023
AA12345670 Company 4 - M 03-Mar-2023
AA2345678 Another random page up company - I 03-Mar-2023
ASSET SCHEDULE\nPolicy Number     1234-56789\nAA2345679 Company 5 Utilities- M 03-Mar-2023

但是我想要检索的是以下内容。

AA1234567 A random company name - I 03-Mar-2023 BUY 42.6400 42.6900 GBP 1,820.3016 1.0000 1,842.4400
AA1234568 Another random company name - H-M 03-Mar-2023 BUY 11.9880 845.6000 GBP 10,137.0528 1.0000 10,159.1700
AA12345679 Third Party Utilities - Fund - Class\nAA-B Income\n03-Mar-2023 BUY 6.4120 836.9100 GBP 5,366.2669 1.0000 5,388.5200
AA12345670 Company 4 - M 03-Mar-2023 BUY 205.6830 10.8500 GBP 2,231.6606 1.0000 2,253.7800
AA2345678 Another random page up company - I 03-Mar-2023 BUY 66.3850 45.4400 GBP 3,016.5344 1.0000 3,038.6500
AA2345679 Company 5 Utilities- M 03-Mar-2023 BUY 76.7370 13.7400 GBP 1,054.3664 1.0000 1,076.4900

本次第三行包含 2 个新行

Class\nAA-B Income\n

我的模式如下

(?<=\\n).*?([a-zA-Z]{3})-(\d{4})

https://regex101.com/r/aiDk9G/1

如果有更简单的方法请告诉我。

提前致谢

尝试了多种模式,但似乎不太明白。

regex regex-lookarounds
2个回答
1
投票

您可以使用这个正则表达式:

(?<=\\n)(?:[A-Z]+[0-9][A-Z0-9]*|-)(?:\s+\w+)+.*?[a-zA-Z]{3}-\d{4}.+?(?=\\n)

正则表达式演示

正则表达式演示:

  • (?<=\\n)
    :回溯以断言
    \n
    在前一个位置
  • 的存在
  • (?:
    :启动非捕获组
    • [A-Z]+
      :匹配 1+ 个大写字母
    • [0-9] 
      :匹配数字
    • [A-Z0-9]*
      :匹配0个或多个大写字母或数字
    • |
      或者
    • -
      :匹配
      -
  • )
    :结束非捕获组
  • (?:\s+\w+)+
    :匹配以 1+ 个空格分隔的公司
  • .*?
    :匹配0+任意字符(非贪婪)
  • [a-zA-Z]{3}-\d{4}
    :匹配
    month-year
    子字符串
  • .+?
    :匹配 1+ 个任意字符(非贪婪)
  • (?=\\n)
    :先行断言
    \n
    在下一个位置
  • 的存在

© www.soinside.com 2019 - 2024. All rights reserved.