我试图拆分一个包含左括号和右括号的字符串,但希望排除前面有子字符串的括号。在以下示例中:
a = 'abc (xyz pqr) qwe ew (kjlk asd) ue(aad) kljl'
我想有一个列表,如:
['abc', 'xyz pqr', 'qwe ew', 'kjlk asd', 'ue(aad)', 'kljl']
所以我想保留ue(aad)而不按(aad)拆分
我试过:
y = [x.strip() for x in re.split(r"[^ue()][()]", a) if x.strip()]
4条答案
按热度按时间gg58donl1#
试试这个:
RegEx
(\S*\(.*?\))
将匹配任何括号和前面的任何字符串,然后循环从前面没有字符串的匹配项中删除周围的括号。qv7cva1a2#
由于关键字在我的例子中总是已知的,我想删除所有的ue(.*?),并将它们保存在一个列表中,然后用括号分割,然后替换它们。这样我就可以分割嵌套的括号。类似于:
**更新:**必须被忽略的括号会有一个子字符串粘在它上面,就像ue()一样,所以在前面加一个空格会忽略它们。
jei2mxaa3#
对于示例数据,可以使用捕获组来保留拆分后的结果。在模式中,捕获除带括号部分前后的括号之外的非空白字符。
在列表解析中,首先检查
x
,然后可以再次测试x.strip()
请注意,这不考虑任何嵌套/平衡括号。
([^\s()]+\([^()]*\))
捕获组1,在从(...)
匹配之前匹配1+个非空白字符|
或(\([^()]*\)[^\s()]+)
捕获组2,从(...)
匹配后匹配1+个非空格字符|
或[()]
与(
或)
匹配请参见Python demo和regex101 demo。
产出
2uluyalo4#
这是一个奇怪的方式来完成这一点,但它的工作: