【问题标题】:How to match line start and ending with specific text如何匹配行开头和结尾与特定文本
【发布时间】:2022-01-27 16:43:23
【问题描述】:

我很难使用这个正则表达式。我正在尝试匹配以“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

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

【问题讨论】:

  • 你已经有了它,它在捕获组 2 中,或者稍微更改一下以捕获组 1 Zahlbetrag\b.*?\b(\d+,\d{2})\s*CHF\b 请参阅 regex101.com/r/KNRTCs/1(组 1 值以绿色突出显示)
  • 你想要Zahlbetrag.*?\K\d+,\d{2}(?=\s*CHF),对吧?见demo。但这是一个 PCRE/Onigmo 唯一的正则表达式。
  • @the-fourth-bird 感谢您的帮助 - 但不幸的是,这对我不起作用,因为我无法访问 group1 - 该软件仅输出第一场比赛。 Wiktor 的解决方案是为我提供所需的输出。所以谢谢你们两个:)

标签: regex pcre


【解决方案1】:

你可以使用

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

请参阅regex demo详情

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

【讨论】:

    【解决方案2】:
    pattern = r"([\d,]*) CHF$"
    
    st = "Zahlbetrag      0,00          13,25               906,80 CHF"
    
    result = re.search(pattern, st)
    
    result[1]= '906,80'
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多