我有一个弦
txt = 'text1 & ("text2" | "text3" | "text4") & "text5" ! (text6 | text7 | text8)'
可以说我想解析它,因此我最终得到了括号之间的元素。我的图案看起来像
pattern = '\(([^\)(]+)\)'
使用python我最终分为两组
>>> print re.findall(pattren, text)
['"text2" | "text3" | "text4"', 'text6 | text7 | text8']
可以说我们想找到一些类似的东西
>>> print re.findall(magic_pattren, text )
['& ("text2" | "text3" | "text4")', '! (text6 | text7 | text8)']
关于那的任何猜测magic_pattren
。我可以使用字符串操作来实现所需的输出。
>>> print [txt[str.find(txt, a)-3: 1+len(a)+str.find(txt, a)] for a in re.findall(pattren, txt)]
['& ("text2" | "text3" | "text4")', '! (text6 | text7 | text8)']
但这感觉有些笨拙,并且如果括号组在开头,则会失败。我可以添加一个检查,但是就像我说的那样有点笨拙。有没有人?
您可以(?:\B\W\s*)?
在模式的开头使用可选组:
import re
p = re.compile(r'(?:\B\W\s*)?\([^()]+\)')
test_str = "(text9 & text10) & text1 & (\"text2\" | \"text3\" | \"text4\") & \"text5\" ! (text6 | text7 | text8)"
print(p.findall(test_str))
示例演示的结果:['(text9 & text10)', '& ("text2" | "text3" | "text4")', '! (text6 | text7 | text8)']
的(?:\B\W\s*)?
是一个非捕获组(以使该值是不是在结果输出),可重复一次或零次(由于最后的?
),并且它的非字字符(匹配\W
)只有当它是前面有非单词字符或字符串(\B
)的开头,后跟0+空格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句