如何提取所有字符(包括换行符),直到第一次出现单词序列?例如以下输入:
输入文本:
"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)
跨换行符不匹配。
不使用正则表达式的解决方案:
from itertools import takewhile
def upto(a_string, stop):
return " ".join(takewhile(lambda x: x != stop and x != "\n".format(stop), a_string))
使用此正则表达式,
re.search("shantaram[\s\S]*?the", string)
代替
re.search("shantaram[\s\S]*the", string)
唯一的区别是“?”。通过使用“?”(例如*?、?),你可以防止最长的匹配。
您想使用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或更多): 或一个或多个重复: 编辑 以回应更新 正则表达式中的括号有两个作用:它们将正则表达式中的一系列项目组合在一起,以便您可以将运算符