【问题标题】:need to split the string based on the keyword需要根据关键字拆分字符串
【发布时间】:2019-01-30 05:46:37
【问题描述】:
string = """Hello World A \n Block1 \n Block2 \n \n Hello World B \n Block1 \n Block2"""

我想在python中使用正则表达式将字符串分成两部分,其中第一部分应包含块Hello World A到Hello World B,第二部分应包含块从Hello World B到结束字符串。

我试过 re.findall() ,但这并没有得到我预期的结果。我想知道这里面可以使用哪个正则表达式语句?

【问题讨论】:

  • 我试过 string_list = re.findall(r'(?s)Hello World A.*?Hello World B',string)。但这并没有给我带来预期的结果。
  • 预期结果是 string_list = ['Hello World A \n Block1 \n Block2 \n ' , Hello World B \n Block1 \n Block2' ]

标签: regex python-3.x


【解决方案1】:

我们可以尝试在 DOT ALL 模式下使用re.findall

string = "Hello World A \n Block1 \n Block2 \n \n Hello World B \n Block1 \n Block2"
result = re.findall("Hello World.*?(?=Hello World|$)", string, re.DOTALL)
print(result)

['Hello World A \n Block1 \n Block2 \n \n ', 'Hello World B \n Block1 \n Block2']

这是我使用的模式:

Hello World.*?(?=Hello World|$)

这匹配Hello World,后跟任何我们不消耗另一个Hello World字符串的最后。 DOT ALL 模式是必要的,因为我们希望 .* 能够跨换行符进行匹配和使用。

【讨论】:

  • 能否请您解释一下这部分“(?=Hello World|$)”以及为什么使用 DOTALL 模式?