Python正则表达式:基于重复字符进行分割

3
我来翻译一下:

我有一个字符串,例如:

--------------------------------
hello world !
--------------------------------
world hello !
--------------------------------
! hello world

我希望能够根据连字符将行分割开来,这些连字符的长度可能是不同的,所以我决定使用正则表达式。我想从中提取的信息是['hello world !', 'world hello !', '! hello world']。我尝试使用固定数量的连字符来拆分字符串,这种方法可以解决问题,但如果连字符的长度是可变的,我就不知道该怎么办了。我尝试过:

re.split(r'\-{3,}', str1)

然而,那似乎并没有起作用。

1
它为什么不能工作?请参考此演示 - Wiktor Stribiżew
1
[x for x in (x.strip() for x in re.split(r'-{3,}', str1)) if x] - falsetru
1
或者 [line for line in s.splitlines() if not re.match('-+', line)] - Maroun
1
@Shafizadeh:我没有逃避任何东西,是OP在逃避。这是OP的正则表达式演示,它实际上将字符串分割,并且结果非常接近。现在,问题是OP没有提到当前方法存在什么问题,最可能的是数组中的空格和空元素。然而,这应该在问题中都有提到。 - Wiktor Stribiżew
@MarounMaroun,你的回答几乎达到了我想要的效果,但是我认为可能是因为我没有解释清楚,我已经更新了我想要的场景和输出。谢谢。 - Johnathon64
显示剩余2条评论
1个回答

2

您可以使用 .strip() 方法从输入和分割后的块中去除不必要的空格:

import re
p = re.compile(r'(?m)^-{3,}$')
t = "--------------------------------\nhello world !\n--------------------------------\nworld hello !\n--------------------------------\n! hello world"
result = [x.strip() for x in p.split(t.strip("-\n\r"))]
print(result)

关于正则表达式,我建议限制为只有连字符的,使用(?m)^-{3,}$匹配从行首(^)到行尾($)之间有3个或更多连字符的行(由于(?m),这些锚点匹配行边界,而不是字符串边界)。
请参见IDEONE演示

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接