当前位置: 首页 > 知识库问答 >
问题:

Regex捕获重复模式时遇到的问题

秦凯定
2023-03-14

假设我有以下字符串:

此处有一些垃圾字符串...(曲目“标题1”F(S#H88(P#M6)(P#M31))(S#K3(P#M58)(P#M58)))(曲目“标题2”P(S#A54(P#R8))(S#V59(P#A25)(P#Y82)))...此处有一些其他垃圾字符串

我需要从这个字符串中提取以下数据:

  1. 标题1
  2. F
  3. (S#H88(P#M6)(P#M31))和(S#K3(P#M58)(P#M58))

而且

  1. 标题2
  2. P
  3. (S#A54(P#R8))和(S#V59(P#A25)(P#Y82))

哪里

  1. 是某种标题。
  2. 是某种状态。
  3. 是列表的某种列表,如(S#xx(P#xx))

由于regex知识有限,我可以得到1和2,但只能得到3的第一部分。
(S#xx(P#xx))可以存在多次,内部(P#xx)也可以存在多次。

我试过很多regex表达式,也查阅过很多帖子,但我总是遇到困难,无法按要求输出数据。

现在我回到\(TRACK“(.*?)”([PF])(\(S.*?\)\)),它只捕获这个示例字符串中两个列表中的第一个。

参见:https://regex101.com/r/fm0zzr/1

我需要做什么来获得描述的所有列表?

共有1个答案

阎阳
2023-03-14

您可以使用

\(TRACK\s+"([^"]*)"\s+([PF])((?:\s+(\([SP](?:[^()]*+|(?-1))*\)))*\))

请参阅正则表达式演示。

详细信息

  • \(track-(track子字符串
  • \s+-一个或多个空白
  • -字符
  • ([^“]*)-组1:除
  • 以外的任何零个或多个字符
  • -字符
  • \s+-一个或多个空白
  • ([PF])-组2:PF
  • ((?:\s+(\([SP](?:[^()]*+(?-1))*\))*\)-组3:
    • (?:\s+(\([SP](?:[^()]*+(?-1))*\)))*-零次或多次重复
      • \s+-一个或多个空白
      • (\([SP](?:[^()]*+(?-1))*\))-组4(技术,递归必需):
        • \(-(字符
        • [SP]-sp
        • (?:[^()]*+(?-1))*-除了()或整个最近捕获的模式之外的零个或多个字符
        • \)-)字符

 类似资料:
  • null 我得到以下错误: 为什么会这样?

  • 总体目标:我希望能够捕获一个正或负数,看起来像这样:xxx.xxx 我也在使用谷歌表,所以我不能使用任何查找

  • 我想匹配string1和以下行中出现的任何内容: 直到遇到以下情况: 因此,在上述4种情况下,使用正确的正则表达式,粗体显示的结果将是匹配的: ['string 1','string 2','string 3'] [“字符串 1” , “字符串 2” , “字符串3”] ['string1.domain.com ',' string2.domain.com ',' string3.domain.c

  • 我想知道为什么这个regex组在Java中不适合我?它在寻找组匹配时抛出异常。我正试着把用破折号隔开的数字匹配起来。

  • 我试图使用express中间件处理错误,在这些行中,我有以下错误 user.js控制器 使用者js模型 app.js 错误 (节点:3304)未经处理的PromisejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置头。。。 (节点:3304)UnhandledPromiseRejtionWarning:未处理的promise拒绝。这个错误要么

  • 我正在试图理解这个代码块。在第一个中,我们在表达式中寻找的是什么? 我的理解是,它是任何一个字符(0或多个*),后面跟0到9之间的任何一个数字(一个或多个+),后面跟任何一个字符(0或多个*)。 执行此操作时,结果为: 使用抓取群的好处是什么?