[英]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.