【问题标题】:Python regex match groupingPython 正则表达式匹配分组
【发布时间】:2018-10-19 20:22:30
【问题描述】:

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 行中的 RANDOMSTRINGs 作为数组数组获取。它们根据 =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)]

【问题讨论】:

  • RANDOMSTRING 可以包含哪些字符?还是他们字面意思是“随机字符串”?
  • RANDOMSTRING 是字母数字,包括最多 50 个字符的空格
  • 可以适应类似:[[el.partition(' ')[2] for el in g] for k, g in itertools.groupby(bodytext.splitlines(), lambda L: L.startswith('=E2=80=A2')) if k] 的内容吗?有点难以具体说明,因为它不是最易读的示例:)
  • @JonClements 非常感谢

标签: python regex string python-2.7


【解决方案1】:

这可能不是最优雅的方法,我不确定它如何处理此处未介绍的极端情况,但下面的代码首先构建了一个由空行分隔的单个列表。然后它遍历所有条目,每次遇到分隔符时都会创建一个新列表。

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

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2017-04-10
    • 1970-01-01
    • 2016-07-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多