簡體   English   中英

如何解析帶括號的表達式的嵌套逗號分隔列表

[英]How to parse nested comma-separated lists of parenthesized expressions

我知道如何使用Python正則表達式模塊解析嵌套括號。 這個正則表達式

\(([^()]*+(?:(?R)[^()]*)*+)\)

正確地找到最外面的括號

some (text)(text here(possible text)text(possible text(more text)))end text

此處為示例)

我也知道如何在逗號分隔的列表中查找項目:

[^,]+(?=,?)

正確匹配列表中的元素

dgad asg , adgda adg, a, g, asdgdg,dg sfg

(請參閱此處

但是我需要將兩者結合起來。 我需要解析逗號分隔列表的元素,其中元素本身可能包含括號(其中包含逗號分隔的列表)。 在這個清單中

dg(dsfsd, (d,d,g)(g,as(d,f) fdg) sdfs, sf)ad asg , adgda (a) adg, a, g, asdgdg,dg sfg(f,g, (dff, d)df, g) kd

我需要將元素標識為:

first: dg(dsfsd, (d,d,g)(g,as(d,f) fdg) sdfs, sf)ad asg
second: adgda (a) adg
third: a
fourth: g
fifth: asdgdg
sixth: dg sfg(f,g, (dff, d)df, g) kd

我不知道如何結合兩個正則表達式。 有人可以幫我嗎? 謝謝。

您可以使用

r'(?>(\((?>[^()]*(?1)?)*\))|[^,])+'

正則表達式演示

細節

  • (?>(\\((?>[^()]*(?1)?)*\\))|[^,])+ -1次或多次出現(以避免空字符串匹配):
    • (\\((?>[^()]*(?1)?)*\\)) -捕獲組1(定義為能夠使用子例程)匹配:
      • \\( -一個(
      • (?>[^()]*(?1)?)* - ()以外的任何0+字符,后跟可選的整個第1組模式(在此處遞歸)
      • \\) -a )
    • | - 要么
    • [^,] -除了,任何字符,

Python演示:

import regex as re

rx = r"(?>(\((?>[^()]*(?1)?)*\))|[^,])+"
s = "dg(dsfsd, (d,d,g)(g,as(d,f) fdg) sdfs, sf)ad asg , adgda (a) adg, a, g, asdgdg,dg sfg(f,g, (dff, d)df, g) kd"
matches = re.finditer(rx, s)
for m in matches:
    print(m.group().strip())

輸出:

dg(dsfsd, (d,d,g)(g,as(d,f) fdg) sdfs, sf)ad asg
adgda (a) adg
a
g
asdgdg
dg sfg(f,g, (dff, d)df, g) kd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM