【发布时间】:2020-02-09 23:34:03
【问题描述】:
总结
我创建了一个正则表达式,它将从一个 html 页面中获取多个不同的数据。它使用非捕获组内的分组备选方案。获取所需数据的效果非常好;但是,这些组并没有在尽可能少的匹配中组合测试器
在编写代码时,我认为在线正则表达式测试器的匹配和组似乎有点奇怪,但直到我在 python 中工作后,我才注意到我的组层次结构存在问题。
我唯一的解决办法似乎是……
- 重写正则表达式以使每个匹配有 5 个匹配组
- 编写 python 代码来扁平化数据结构。
- 别的什么???
上面的数字 1 会更好。我不想用不需要的代码“污染”我的代码库
代码
正则表达式
^.*(?:<p.*>(.*)|<span>(.*)<\/span>|<a href=\"(.*linux(?:\.tar\.gz|.zip))\">(.*)</a>.*\((.*) bytes\))
游乐场 https://regex101.com/r/MC8TOv/1/
Python
使用 BeautifulSoup 时
import re
...
regex = r"^.*(?:<p.*>(.*)|<span>(.*)<\/span>|<a href=\"(.*linux(?:.tar.gz|.zip))\">(?P<filename>.*)</a>.*\((.*) bytes\))"
match = re.findall(regex, str(soup_html), re.M)
print(match)
期望
我得到了什么这是我得到的一些通用输出。
[
('A1', '', '', '', ''),
('', 'B1', '', '', ''),
('', '', 'C1', 'D1', 'E1'),
('A2', '', '', '', ''),
('', 'B2', '', '', ''),
('', '', 'C2', 'D2', 'E2'),
...
]
我想要什么
[
('A1', 'B1', 'C1', 'D1', 'E1'),
('A2', 'B2', 'C2', 'D2', 'E2')
...
]
再一次,有没有办法重写正则表达式,使每场比赛有 5 个匹配的组?
【问题讨论】:
-
为什么投反对票?这怎么不显示研究或不清楚?
标签: python regex python-3.x regex-group flatten