我想查找在集合中分组的索引数组元素(用逗号分隔),并且搜索应产生类似这样的结果(请参见下面的文件数据示例)-
[ 'foo[0]', 'foo[1]', 'foo[2]', ..., 'foo[10]']
['foobar0[0]', 'foobar0[1]', 'foobar0[2]' ..., 'foobar0[98]']
[ 'bas[0]', 'bas[1]', 'bas[2]' ..., 'bas[99]']
我有一个文本文件,其中这些文件显示为跨多行的“集合”,并且集合按{..}分组(如下所示)-
{foo[0], foo[1], foo[2], foo[3]...\n
foo[10]}, {fooba0[0], foobar0[1], foobar0[2],....\n
foobar0[98], foobar0[99]}, {bas[0], bas[1], bas[2]...\n
bas[99]}
我用来搜索数组元素的一般表达式是-
re.findall('[a-z][A-Z]+[0-9]+\[[0-9]+\]', <list item>)
在yacc中,这将转换为-
array_element_token: [a-z][A-Z]+[0-9]+\[[0-9]+\]
array_items_continued: array_items_continued |
array_element_token ','
arrays_items: '{' array_items_continued array_element_token '},'
构建我不确定如何使用python正则表达式创建递归规则。
问题来源:stackoverflow
您可以使用
import re
s = r"""{foo[0], foo[1], foo[2], foo[3]...\n
foo[10]}, {fooba0[0], foobar0[1], foobar0[2],....\n
foobar0[98], foobar0[99]}, {bas[0], bas[1], bas[2]...\n
bas[99]}"""
results = []
matches = re.findall(r'{[^{}]\*', s)
for m in matches:
results.append( re.findall(r'\w+\[\d+]', m) )
参见Python演示,结果为[[[foo [0]],'foo [1]','foo [2]','foo [3]','foo [10]'],['fooba0 [ 0]','foobar0 [1]','foobar0 [2]','foobar0 [98]','foobar0 [99]'],['bas [0]','bas [1]','bas [2]','bas [99]']]`。
{{^ {}] *regex提取
{和
}之间的所有子字符串,然后\ \ w + [\ d +]
提取与以下序列匹配的所有子字符串:
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。