用于匹配方括号内数字列表的Python正则表达式
所以我试着做一个函数,返回一个文本中的所有引用(CIT),有时这个文本是一个列表,这就是为什么我首先验证它用于匹配方括号内数字列表的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
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)