Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将特定模式的字符串拆分为三部分_Python_Python 2.7 - Fatal编程技术网

Python 将特定模式的字符串拆分为三部分

Python 将特定模式的字符串拆分为三部分,python,python-2.7,Python,Python 2.7,给我一个字符串,它是这样的: [blah blah blah] [more blah] some text 我想把字符串分成三部分:blah-blah-blah,more-blah和一些文本 一种简单的方法是使用mystr.split(']'),然后从前两个元素中删除前导[。是否有更好且性能更好的方法(需要非常快地对数千个字符串执行此操作).如果您知道文本将采用正则表达式的形式,则可以使用正则表达式来提取文本。为了提高效率,您可以预编译正则表达式,然后在匹配时重复使用它 prog = re.c

给我一个字符串,它是这样的:

[blah blah blah] [more blah] some text
我想把字符串分成三部分:
blah-blah-blah
more-blah
一些文本


一种简单的方法是使用
mystr.split(']')
,然后从前两个元素中删除前导
[
。是否有更好且性能更好的方法(需要非常快地对数千个字符串执行此操作).

如果您知道文本将采用正则表达式的形式,则可以使用正则表达式来提取文本。为了提高效率,您可以预编译正则表达式,然后在匹配时重复使用它

prog = re.compile('\[([^\]]*)\]\s*\[([^\]]*)\]\s*(.*)')

for mystr in string_list:
    result = prog.match(mystr)
    groups = result.groups()

如果您想对正则表达式本身进行解释,您可以得到一个解释。

您可以使用正则表达式拆分要省略字符的位置:

>>> import re
>>> s = '[...] [...] ...'
>>> re.split(r'\[|\] *\[?', s)[1:]
['...', '...', '...']

第一组
[blah blah]
和第二组
[more blah]
是否总是包含相同数量的字符?@TehTris,不是真的。它们将包含不同长度的内容。那么
re
可能是你最好的选择,除非你想做一些像
first=line这样的傻事[:line.find(']')]
second=line[len(first):line.find(']')]
third=line[len(first)+len(second):]
谢谢你的回答。我想知道是否有可能使用正则表达式来匹配第二个
[更多废话]
块可能存在或可能不存在的类似情况。换句话说,我们可以使用正则表达式来拆分字符串,这些字符串要么是
[blah blah][more blah]一些文本
,要么是
[blah blah]一些文本
?@skyork:Yep,只需向包含第二组
[]
的非捕获组
(?:…)
添加一个“可选”(
)修饰符即可。换句话说,这是:
\[([^\]]*)\]\s*(?:\[([^\]*)\])?\s*(*)