我有这样的文本格式
s = '[aaa]foo[bbb]bar[ccc]foobar'
实际上这篇文章是这样的中国汽车评论
【最满意】整车都很满意,最满意就是性价比,...【空间】空间真的超乎想象,毫不夸张,...【内饰】内饰还可以吧,没有多少可以说的...
现在我想把它分成这些部分
[aaa]foo
[bbb]bar
[ccc]foobar
首先我试过了
>>> re.findall(r'\[.*?\].*?',s)
['[aaa]', '[bbb]', '[ccc]']
只有上半场。你知道吗
然后我试着
>>> re.findall(r'(\[.*?\].*?)\[?',s)
['[aaa]', '[bbb]', '[ccc]']
还是只有上半场
最后我得把这两部分分别拿出来,然后把它们拉上拉链
>>> re.findall(r'\[.*?\]',s)
['[aaa]', '[bbb]', '[ccc]']
>>> re.split(r'\[.*?\]',s)
['', 'foo', 'bar', 'foobar']
>>> for t in zip(re.findall(r'\[.*?\]',s),[e for e in re.split(r'\[.*?\]',s) if e]):
... print(''.join(t))
...
[aaa]foo
[bbb]bar
[ccc]foobar
所以我想知道是否存在一些正则表达式可以直接将它拆分成这些部分?你知道吗
方法之一:
输出:
\[
或\]
-按字面意思匹配括号[^]]+
-匹配除]
之外的一个或多个字符[^\[\]]+
-匹配除括号\[\]
以外的任何字符我认为这可以奏效:
我认为如果输入字符串格式“足够严格”,就可以尝试不带regexp的东西。这看起来可能是一个微观优化,但可能是一个有趣的挑战。你知道吗
所以我试着在1英里迭代中检查性能,下面是我的结果(秒):
相关问题 更多 >
编程相关推荐