使用正则表达式解析字符串

法赫德·丹尼亚尔

我有一个弦

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Scala中使用正则表达式解析ddMMMyy日期字符串

来自分类Dev

使用正则表达式验证字符串

来自分类Dev

使用正则表达式匹配字符串?

来自分类Dev

用正则表达式解析字符串

来自分类Dev

使用正则表达式删除字符串

来自分类Dev

使用正则表达式分割字符串

来自分类Dev

如何使用正则表达式从字符串中解析出日期?

来自分类Dev

通过正则表达式解析字符串

来自分类Dev

使用正则表达式的除法字符串

来自分类Dev

使用正则表达式解析此字符串?

来自分类Dev

使用正则表达式解析字符串

来自分类Dev

在python中使用正则表达式解析查询字符串

来自分类Dev

字符串提取使用正则表达式

来自分类Dev

使用正则表达式替换字符串

来自分类Dev

正则表达式解析我的字符串

来自分类Dev

使用正则表达式匹配字符串?

来自分类Dev

如何使用正则表达式解析字符串以排除特殊字符

来自分类Dev

使用正则表达式过滤字符串

来自分类Dev

用正则表达式解析字符串

来自分类Dev

通过正则表达式解析字符串

来自分类Dev

使用正则表达式标记字符串

来自分类Dev

使用正则表达式的除法字符串

来自分类Dev

使用正则表达式测试字符串

来自分类Dev

正则表达式用于解析字符串

来自分类Dev

使用正则表达式替换字符串

来自分类Dev

使用正则表达式验证字符串

来自分类Dev

正则表达式解析子字符串

来自分类Dev

使用正则表达式删除字符串

来自分类Dev

使用正则表达式替换字符串;