Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于匹配方括号内数字列表的Python正则表达式_Python_Regex - Fatal编程技术网

用于匹配方括号内数字列表的Python正则表达式

用于匹配方括号内数字列表的Python正则表达式,python,regex,Python,Regex,所以我试着做一个函数,返回一个文本中的所有引用(CIT),有时这个文本是一个列表,这就是为什么我首先验证它 def get_cits_from_note(note): if note: if isinstance(note, list): note = "".join(note) matchGroups = re.findall(r'\|CITS\s*:*\s*\[\s*(\d+)', note) if matchG

所以我试着做一个函数,返回一个文本中的所有引用(CIT),有时这个文本是一个列表,这就是为什么我首先验证它

def get_cits_from_note(note):
    if note:
        if isinstance(note, list):
            note = "".join(note)
        matchGroups = re.findall(r'\|CITS\s*:*\s*\[\s*(\d+)', note)
        if matchGroups:
            citsList = [match for match in matchGroups]
            print citsList
文本是这样的(文本是我从维基百科复制/粘贴的,这就是为什么它没有任何意义):

括号是一个高标点符号,通常在文本中成对使用,| CITS:[123]、[456]、[789]|分隔或插入其他文本。匹配的一对最好描述为开放和| CITS:[999]|。不太正式的是,在从左到右的上下文中,它可以被描述为左和右,在从右到左的上下文中,它可以被描述为右和左

这是我构建的第一个正则表达式:

matchGroups = re.findall(r'\|CITS\s*:*\s*\[\s*(\d+)', note)
但它只会打印:

[u'123']
所以我做了第二个正则表达式:

matchGroups = re.findall(r'\|CITS\s*:*\s*((\[\s*(\d+)]+,*\s*)+)\|', note)
但它不像我想要的那样工作,因为它打印:

[(u'[123], [456], [789]', u'[789]', u'789'), (u'[999]', u'[999]', u'999')]
我已经处理这个正则表达式有一段时间了,但我无法使它工作,有人能告诉我我缺少了什么吗

最终输出应为:

[u'123',u'456',u'789',u'999']
输出

['123', '456', '789', '999']

不仅仅是正则表达式,但如果我正确理解您的目标,这可以做到:

raw_list = [x.strip().split(',')
            for x in re.findall(r'\|CITS\s*:([\[\]\d\s,]+)', note)]
flatten = lambda l : [item for sublist in l for item in sublist]
cits = flatten(raw_list)
然而,这也将与类似的无意义事件相匹配
|CITS:[1,7[,”

但是这会得到文本中的所有数字,即使它不是引用,这可能是个问题,不是吗?谢谢你的回答,伊玛试试!就像我说的,这将匹配“|CITS:”后面的空格、逗号、数字和方括号的任意组合:,因此,如果您需要检查引用的有效格式,则需要进一步调整。
raw_list = [x.strip().split(',')
            for x in re.findall(r'\|CITS\s*:([\[\]\d\s,]+)', note)]
flatten = lambda l : [item for sublist in l for item in sublist]
cits = flatten(raw_list)