gpt4 book ai didi

python - 正则表达式:捕获一组具有相同开头的行?

转载 作者:行者123 更新时间:2023-12-01 06:00:57 24 4
gpt4 key购买 nike

我正在编写一个脚本来浏览产品数据库,其中产品描述的格式很差且不一致,以使其 HTML 统一。我遇到的一个问题是捕获和替换以相同方式格式化的代码行。例如,我想替换他们所有的

• item 1
• item 2
• item 3

<ul>
<li>item 1</li>
<li>item 3</li>
<li>item 2</li>
</ul>

替换每个 &bull;<li>content</li> 一致行很简单,但我一生都无法弄清楚要在列表之前和之后获取的正则表达式。我的想法是捕获以 &bull; 开头的所有内容直到出现&bull; 开头的换行符。这是我最近的尝试(python):

In  : p = re.compile(
r'&bull;.*(?!^&bull;)'
)

In : p.findall(text, re.MULTILINE, re.DOTALL)
Out : []

In : p.findall(text, re.MULTILINE)
Out : ['&bull; item 1', '&bull; item 2', '&bull; item 3']

In : p.findall(text, re.DOTALL)
Out : ['&bull; item 1', '&bull; item 2', '&bull; item 3']

In : p.findall(text)
Out : ['&bull; item 1', '&bull; item 2', '&bull; item 3']

有关如何捕获类似 ['&bull; item 1\n&bull; item 2\n&bull; item 3'] 的任何想法?

最佳答案

这是一个非基于正则表达式的解决方案:

with open('/tmp/example.txt') as f:
lines_in = f.readlines()

inside_block = False
lines_out = []

for line in lines_in:
if line.startswith('&bull; '):
if not inside_block:
lines_out.append('<ul>\n')
inside_block = True
lines_out.append('<li>{}</li>\n'.format(line.strip().replace('&bull; ','')))
else:
if inside_block:
lines_out.append('</ul>\n')
inside_block = False
lines_out.append(line)

print ''.join(lines_in)
print '-'*78
print ''.join(lines_out)

测试运行:

[~/Desktop]
|7>run /tmp/spam.py
spam
&bull; item 1
&bull; item 2
&bull; item 3
and eggs

------------------------------------------------------------------------------
spam
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
and eggs

关于python - 正则表达式:捕获一组具有相同开头的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10490825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com