当前位置: 首页 > 知识库问答 >
问题:

python多行正则表达式[重复]

强志学
2023-03-14

如何提取所有字符(包括换行符),直到第一次出现单词序列?例如以下输入:

输入文本:

"shantaram is an amazing novel.
It is one of the best novels i have read.
the novel is written by gregory david roberts.
He is an australian"

和序列the我想从shantaram中提取文本到第二行中第一次出现的the

输出必须为-

shantaram is an amazing novel.
It is one of the

我整个上午都在努力。我可以编写表达式来提取所有字符,直到遇到特定字符,但如果我使用这样的表达式:

re.search("shantaram[\s\S]*the", string)

跨换行符不匹配。

共有3个答案

姜嘉荣
2023-03-14

不使用正则表达式的解决方案:

from itertools import takewhile
def upto(a_string, stop):
    return " ".join(takewhile(lambda x: x != stop and x != "\n".format(stop), a_string))
全昊焜
2023-03-14

使用此正则表达式

re.search("shantaram[\s\S]*?the", string)

代替

re.search("shantaram[\s\S]*the", string)

唯一的区别是“?”。通过使用“?”(例如*?、?),你可以防止最长的匹配。

劳豪
2023-03-14

您想使用DOTALL选项跨换行符进行匹配。从doc.python.org:

道尔先生

做“.”特殊字符匹配任何字符,包括换行符;没有这个标志,'.'将匹配除换行符之外的任何内容。

演示:

In [1]: import re

In [2]: s="""shantaram is an amazing novel.
It is one of the best novels i have read.
the novel is written by gregory david roberts.
He is an australian"""

In [3]: print re.findall('^.*?the',s,re.DOTALL)[0]
shantaram is an amazing novel.
It is one of the
 类似资料:
  • 问题内容: 我正在使用python和pexpect从某些cisco设备中收集一些信息,并且在RE上成功地提取了讨厌的小物件。恐怕我已经撞墙了。一些开关堆叠在一起,我已经在脚本中确定了这一点,并使用了一个单独的例程来解析数据。如果将交换机堆叠在一起,则会看到以下内容(从推杆输出中提取) 当我遇到此问题时,我需要提取4表中每个开关的编号和型号(sw可以忽略,但是可以有1到9个开关)这是多行事物使我如愿

  • 但是抓住 以重复的方式?

  • 假设我有以下文本,我想提取“数字开头”和“数字结尾”之间的文本,其中有动态数量的行,并且其中数字的唯一变化,例如:第一、第二等。我将从中提取数据的每个文件在“数字开头”和“数字结尾”之间都有不同数量的行。如何在不知道数字开头“和”数字结尾“之间的文件中有多少行的情况下编写正则表达式来匹配”数字开头“和”数字结尾“之间的内容? 当做

  • 问题内容: 我对多行字符串的replaceAll有问题: 以上适用于testWorks,但不适用于testIllegal !?为什么会这样,我该如何克服呢?我需要替换跨越多行的注释/ * … * /。 问题答案: 您需要使用标志来表示点应与换行符匹配。例如 或者使用例如在模式中指定标志

  • 问题内容: 有没有办法使用正则表达式来匹配重复的字符集?例如: 我知道那是错的。但是有什么可以匹配这种效果的吗? 更新: 您可以使用嵌套捕获组吗?像什么? 问题答案: 将要重复的正则表达式放在括号中。例如,如果您要重复5次: 或者,如果您想要任意数量的重复(0或更多): 或一个或多个重复: 编辑 以回应更新 正则表达式中的括号有两个作用:它们将正则表达式中的一系列项目组合在一起,以便您可以将运算符