[英]Python regex match grouping
RANDOMSTRING是字母数字,包括最多50个字符的空格
RANDOMSTRING $RANDOMFLOAT Paid with Visa ending in RANDOMINT *- For: RANDOMSTRING -*
RANDOMINTx *RANDOMSTRING* (RANDOMSTRING)
=E2=80=A2 RANDOMSTRING1
$RANDOMFLOAT
RANDOMINTx RANDOMSTRING (RANDOMSTRING)
=E2=80=A2 RANDOMSTRING2
=E2=80=A2 RANDOMSTRING3
=E2=80=A2 RANDOMSTRING4
=E2=80=A2 RANDOMSTRING5
$RANDOMFLOAT
RANDOMINTx *RANDOMSTRING* (RANDOMSTRING)
=E2=80=A2 RANDOMSTRING6
=E2=80=A2 RANDOMSTRING7
$RANDOMFLOAT
RANDOMINTx *RANDOMSTRING* (RANDOMSTRING)
=E2=80=A2 RANDOMSTRING8
=E2=80=A2 RANDOMSTRING9
您好,我想在=E2=80=A2
行中以数组的形式获取RANDOMSTRING
。 它们根据= E2 = 80 = A2分组。
预期输出示例:
[[RANDOMSTRING1], [RANDOMSTRING2, RANDOMSTRING3, RANDOMSTRING4, RANDOMSTRING5], [RANDOMSTRING6, RANDOMSTRING7], [RANDOMSTRING8, RANDOMSTRING9]]
我用什么:
menu_item_accessories_items = re.findall("((=E2=80=A2 .*$)|\n\n)", bodytext, re.MULTILINE)
我得到的输出(touples数组):
[(RANDOMSTRING1, RANDOMSTRING1), (RANDOMSTRING2, RANDOMSTRING2), (RANDOMSTRING3, RANDOMSTRING3), (RANDOMSTRING4, RANDOMSTRING4), (RANDOMSTRING5, RANDOMSTRING5), (RANDOMSTRING6, RANDOMSTRING6), (RANDOMSTRING7, RANDOMSTRING7), (RANDOMSTRING8, RANDOMSTRING8), (RANDOMSTRING9, RANDOMSTRING9)]
这可能不是最优雅的方法,我不确定它如何处理此处未介绍的极端情况,但是下面的代码首先构建了一个由空行分隔的列表。 然后,它将遍历所有条目,并在遇到分隔符时创建一个新列表。
lines = [x for x in bodytext.split('\n') if x == '' or x.startswith('=E2=80=A2')]
res = []
tmp = []
for line in lines:
if line == '':
if len(tmp) > 0:
res += [tmp]
tmp = []
else:
tmp += line.split(' ')[1:]
print res
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.