gpt4 book ai didi

java - 正则表达式捕获其间重复组数量未知的文本

转载 作者:行者123 更新时间:2023-11-29 04:53:50 27 4
gpt4 key购买 nike

我正在尝试在第二层下解析以下文本中“Dining:”后面的数字。所以应该返回 '666'。

    MAIN LEVEL
Entrance: 11
Dining: 33

SECOND LEVEL
Entrance: 4444
Living: 5555
Dining: 666

THIRD LEVEL
Dining: 999
Kitchen: 000
Family: 33332

如果我使用类似 (?:\bDining:\s)(.*\b) 的东西,那么它会捕获 MAIN 下的第一次出现。因此,我尝试在正则表达式中指定 SECOND LEVEL,然后是以下重复模式:新行、多个空格,然后是任何文本,直到找到 Dining: . This demo说明了我遇到的两个问题。使用的正则表达式是:(?:\bSECOND\sLEVEL(\n\s+.*)*Dining:)(.*\b)

  1. 出现“灾难性回溯”错误直到您删除包含Laundry: 1 的最后一行。是因为匹配太多还是什么原因?
  2. 删除该行后,正则表达式仅捕获 OTHER LEVEL 下的last 匹配..返回“2”而不是 SECOND LEVEL 下的匹配

有时 Dining:SECOND LEVEL 下不存在,因此不应返回任何内容。

什么是只捕获 SECOND LEVELDining: 号码,如果不存在则什么都不返回的正则表达式?首选正则表达式,如果可能,不要在 Java 中循环。谢谢

最佳答案

使用基于负前瞻的正则表达式。

"(?m)^\\s*\\bSECOND LEVEL\\n(?:(?!\\n\\n)[\\s\\S])*\\bDining:\\s*(\\d+)"

DEMO

关于java - 正则表达式捕获其间重复组数量未知的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34476656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com