首页 > 解决方案 > Python:在文本中的两个字符串之间查找一个字符串

问题描述

我有这样的文字

s = """
...

(1) Literature

1. a.
2. b.
3. c.

...
"""

我想剪掉文学部分,但我在检测方面遇到了一些问题。

我在这里使用

re.search("(1) Literature\n\n(.*).\n\n", s).group(1)

search返回无。

期望输出是

(1) Literature

1. a.
2. b.
3. c.

 

我做错了什么?

标签: pythonregexstring

解决方案


您可以匹配(1) Literature2 个换行符,然后捕获所有以数字开头后跟一个点的行。

\(1\) Literature\n\n((?:\d+\..*(?:\n|$))+)

模式匹配:

  • \(1\) Literature\n\n匹配 (1) 文献和 2 个换行符
  • (捕获组 1
    • (?:非捕获组
      • \d+\..*(?:\n|$)匹配 1+ 个数字和一个点,后跟换行符或字符串结尾
    • )+关闭非捕获组并重复 1 次或多次以匹配所有行
  • )关闭组 1

正则表达式演示


另一种选择是使用负前瞻捕获所有以下不以(数字开头的行),然后修剪前导和尾随空格。

\(1\) Literature((?:\n(?!\(\d+\)).*)*)

正则表达式演示


推荐阅读