如何匹配行的开始和结束与特定文本

How to match line start and ending with specific text

我很难使用这个正则表达式。我正在尝试匹配以“Zahlbetrag”开头并以“CHF”结尾的行中的金额。

要搜索的文字是:

Zwischentotal   0,00          13,24               906,79 CHF
Zahlbetrag      0,00          13,25               906,80 CHF

到目前为止我的正则表达式:

(?<=Zahlbetrag)(?:.*?)((\d+,\d{2})(?=([\s]*)CHF))

当前的结果是(用 https://regex101.com/ 测试):

Match 1:       0,00          13,25               906,80
Group 1: 906,80
Group 2: 906,80
Group 3:  

但我需要第一个匹配项是:

Match 1: 906,80

它应该只包括最后一个数字,而不是整行。有谁知道这是如何实现的?

pattern = r"([\d,]*) CHF$"

st = "Zahlbetrag      0,00          13,25               906,80 CHF"

result = re.search(pattern, st)

result[1]= '906,80'

您可以使用

Zahlbetrag.*?\K\d+,\d{2}(?=\s*CHF)

参见regex demo详情:

  • Zahlbetrag - 文字字符串
  • .*? - 除换行字符外的零个或多个字符,尽可能少
  • \K - 省略目前匹配的文本
  • \d+ - 一位或多位数字
  • , - 逗号
  • \d{2} - 两位数
  • (?=\s*CHF) - 匹配一个位置的正向前瞻,紧接着是零个或多个空格,然后是 CHF.