python - Python 正则表达式匹配分组
问题描述
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
您好,我想将RANDOMSTRING
每行中的 s=E2=80=A2
作为数组数组。它们根据 =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
推荐阅读
- javascript - 对于许多级别,React 递归渲染非常慢,并行性可用吗?
- sql - 带有case语句的CAST中的SQL语法错误
- loops - 如何修复 for 循环中的错误。帕斯卡
- .net - Dotnet:Dockerfile 没有这样的文件或目录
- sql - 如何将 SQL 代码转换为雪花代码
- pdf - 在 dompdf 中嵌入 pdf 文件
- microsoft-dynamics - SAP BW 和 Dynamics 365 集成
- ios - 用于 Swift 的 BSON 解析器
- javascript - Dropzone 接受的文件过滤器
- javascript - Vue Router中切换路由导致数据重复