Regex忽略行项目编号和金额之间的所有字符

Regex忽略行项目编号和金额之间的所有字符,regex,Regex,我的文本行如下所示: 1 SE20040021 B18204015560 24-04-2020 ABC LO 500319L 224.55 2 SE20040022 B10204006583 24-04-2020 KAR 170363Y 388.05 其中,字符串开头的1或2=行项目编号(行项目编号预先指定为1、2、3等) 其中224.55或388.05=金额(始终以带2位小数的正数表示) 我想要一个正则表达式,在搜索预先指定的行项目编号后,它会忽略行项目编号和金额之间未指定数量的字符 第1行或

我的文本行如下所示: 1 SE20040021 B18204015560 24-04-2020 ABC LO 500319L 224.55 2 SE20040022 B10204006583 24-04-2020 KAR 170363Y 388.05

其中,字符串开头的1或2=行项目编号(行项目编号预先指定为1、2、3等) 其中224.55或388.05=金额(始终以带2位小数的正数表示)

我想要一个正则表达式,在搜索预先指定的行项目编号后,它会忽略行项目编号和金额之间未指定数量的字符

第1行或第2行中未指定的字符数为

1 SE20040021 B18204015560 24-04-2020 ABC LO 500319L 2 SE20040022 B10204006583 24-04-2020 KAR 170363Y

返回的结果是: 对于行项目1,仅返回字符串224.55 对于行项目2,仅返回字符串388.05

下面是我用来返回数字字符串的内容(^[0-9]+\d*\d*$)
但我不知道如何将模式与行项目1匹配并返回数字字符串。

要获得这两个值,您可以使用两个捕获组,并将第一个组后的空格与最后一个组前的空格进行匹配

^(\d+) .* (\d+\.\d{2})$
部分地

  • ^
    字符串的开头
  • (\d+)
    捕获组1,匹配1+个数字
  • *
    匹配一个空格,除换行符外的任何字符0+次,然后再匹配一个空格
  • (\d+\.\d{2})
    捕获组2,匹配1+个数字、一个点和2个数字
  • $
    字符串结尾

然后,您可以使用以下两组进行替换:

Line Item Number $1 = $2
更新

您也可以使用积极的回顾:

(?<=^1 .* )\d+\.\d{2}

(?要获取这两个值,可以使用两个捕获组,并匹配第一个组后的空间和最后一个组前的空间

^(\d+) .* (\d+\.\d{2})$
部分地

  • ^
    字符串的开头
  • (\d+)
    捕获组1,匹配1+个数字
  • *
    匹配一个空格,除换行符外的任何字符0+次,然后再匹配一个空格
  • (\d+\.\d{2})
    捕获组2,匹配1+个数字、一个点和2个数字
  • $
    字符串结尾

然后,您可以使用以下两组进行替换:

Line Item Number $1 = $2
更新

您也可以使用积极的回顾:

(?<=^1 .* )\d+\.\d{2}

(?Oops.好的,我没有得到第1组的捕获。但是在那之后它似乎起作用了。这是我对行项目编号1^(1)。*(\d+\.\d{2}$)我正在尝试这个。它似乎在正则表达式演示中起作用。我得到的是正确的吗?^(1)。*(\d+\.\d{2}$^(2)。*(\d+\.\d+.\d{2}$是的,你可以硬编码第一组的值
^(1)。*(\d+.\d}{2})$
请参见第1行金额:捕获错误-无法使用正则表达式“\b(?^(1)。*(\d+\.\d{2})$)\b”匹配值。我得到了一个非常奇怪的结果。工具或语言是什么?像这样尝试
^(?1)。*(\d+\.\d{2})$
Oops。好的,我没有获得组1捕获。但是在那之后,它似乎起作用了。下面是我对行项目编号1^(1)使用的内容*(\d+\.\d{2})$)我正在尝试这个。它似乎在Regex演示中起作用。我说的对吗^(1) .*(\d+\.\d{2})$^(2)。*(\d+\.\d{2})$是的,您可以硬编码第一组的值
^(1)。*(\d+\.\d{2})$
请参见第1行项目金额:捕获错误-无法使用regex'\b(?^(1)。*(\d+\.\d{2})$)\b'我得到了这个非常奇怪的结果,工具或语言是什么?像这样尝试
^(?1)。*(\d+\.\d{2})$