假设我有以下字符串:
Some crap string here...(TRACK "title1" F (S #h88 (P #m6) (P #m31)) (S #k3 (P #m58) (P #m58)))(TRACK "title2" P (S #a54 (P #r8)) (S #v59 (P #a25) (P #y82)))...Some other crap string here 我需要从这个字符串中提取以下数据:
1. title1 2. F 3. (S #h88 (P #m6) (P #m31)) 和 (S #k3 (P #m58) (P #m58))
和
1. title2 2. P 3. (S #a54 (P #r8)) 和 (S #v59 (P #a25) (P #y82))
其中:
1. 是某种标题。 2. 是某种状态。 3. 是某种列表,如 (S #xx (P #xx))。
由于我的正则表达式知识有限,我可以获取1和2,但只能获取3的第一部分。
我尝试了许多正则表达式,并咨询了很多帖子,但我仍然无法按要求提取数据。
所以现在我回到了
请参见:https://regex101.com/r/FM0ZZR/1 我需要做什么才能获取所有描述的列表?
Some crap string here...(TRACK "title1" F (S #h88 (P #m6) (P #m31)) (S #k3 (P #m58) (P #m58)))(TRACK "title2" P (S #a54 (P #r8)) (S #v59 (P #a25) (P #y82)))...Some other crap string here 我需要从这个字符串中提取以下数据:
1. title1 2. F 3. (S #h88 (P #m6) (P #m31)) 和 (S #k3 (P #m58) (P #m58))
和
1. title2 2. P 3. (S #a54 (P #r8)) 和 (S #v59 (P #a25) (P #y82))
其中:
1. 是某种标题。 2. 是某种状态。 3. 是某种列表,如 (S #xx (P #xx))。
由于我的正则表达式知识有限,我可以获取1和2,但只能获取3的第一部分。
(S #xx (P #xx))
可以存在多次,内部的(P #xx)也可以存在多次。我尝试了许多正则表达式,并咨询了很多帖子,但我仍然无法按要求提取数据。
所以现在我回到了
\(TRACK "(.*?)" ([P|F]) (\(S.*?\)\))
,它只捕获此示例字符串中两个列表中的第一个。请参见:https://regex101.com/r/FM0ZZR/1 我需要做什么才能获取所有描述的列表?
(?:\G(?!\A)|\(TRACK\s+"([^"]*)"\s+([PF]))\s+(\([SP](?:[^()]*+|(?-1))*\))\)?
,但它将不太可用,或需要相当多的额外代码。 - Wiktor Stribiżew(?-1)
对子模式进行递归很酷,这些模式太棒了 ++ - The fourth bird