如果我有这样的正则表达式,例如:
>>> text = 'asd321zxcnmzasd5'
>>> re.findall('(asd)(\d*)', text)
[('asd', '321'), ('asd', '5')]
如何让它改变元组中元素的顺序?像这样举例如:
[('321', 'asd'), ('5', 'asd')]
元组可能有两个以上的元素,所以我不想只是颠倒顺序,或者在应用正则表达式之前反转文本并使用一些前瞻/外观函数。我想知道我是否能以某种方式在RegEx中设置顺序,就像我给它命名(?P<name>...)
答案 0 :(得分:2)
使用finditer
代替findall
:
>>> for res in re.finditer('(?P<str>asd)(?P<dig>\d*)', text):
... print (res.group('dig'),res.group('str'))
...
('321', 'asd')
('5', 'asd')
>>> [(res.group('dig'),res.group('str')) for res in re.finditer('(?P<str>asd)(?P<dig>\d*)', text)]
[('321', 'asd'), ('5', 'asd')]
答案 1 :(得分:0)
您可以使用namedtuple。像这样(未经测试)
from collections import namedtuple
NT = namedtuple('NT', 'first second')
def my_order(m):
new_order = []
for item in m:
new_order.append((item.second, item.first))
return new_order
m = re.findall(NT('(asd)(\d*)'), text)
my_m = my_order(m)
答案 2 :(得分:0)
您可以使用
反转元组a=[('asd', '321'), ('asd', '5')]
a= [tuple(reversed(i)) for i in a]
print a
print a[0][0]
[('321', 'asd'), ('5', 'asd')]