python - 如何在字符串中多次出现的特定字符之间获取字符

时间:2016-12-06 13:28:43

标签: python

我有一个字符串,大约有270 M行,如下所示;

<DOC> <DOC>+BDTag
<S> <S>+BSTag
--- ----
--- ----
</S> </S>+ESTag
<S> <S>+BSTag
--- ----
--- ----
</S> </S>+ESTag
<S> <S>+BSTag
--- ----
--- ----
</S> </S>+ESTag
-----

我想在所有字符串中获取<S> <S>+BSTag</S> </S>+ESTag之间的字符,并创建一个列表。

你能给我一个最快解决方案的例子吗?

谢谢,

1 个答案:

答案 0 :(得分:4)

一个简单的解决方案可以使用正则表达式。

例如,使用re.findall我们可以写,

>>> str = """<DOC> <DOC>+BDTag
... <S> <S>+BSTag
... hello world
... </S> </S>+ESTag
... <S> <S>+BSTag
... line 2
... </S> </S>+ESTag
... <S> <S>+BSTag
... line 3
... </S> </S>+ESTag
... -----"""

>>> re.findall(r'<S> <S>\+BSTag(.*?)</S> </S>\+ESTag', str, re.DOTALL)
['\nhello world\n', '\nline 2\n', '\nline 3\n']

它的作用是什么?

  • <S> <S>\+BSTag匹配起始行。
  • (.*?).*匹配任何内容。 ?使其变得懒惰,以便在看到第一个结束行时停止。
  • </S> </S>\+ESTag匹配结束行
  • re.DOTALL这确保.也匹配新行。