正则表达式匹配特定字符串之后的文本,直到另一个特定字符串

     2023-03-13     220

关键词:

【中文标题】正则表达式匹配特定字符串之后的文本,直到另一个特定字符串【英文标题】:Regex matching a text after a specific string until another specific string 【发布时间】:2018-08-11 18:24:52 【问题描述】:

如果我有以下示例:

X-FileName: pallen (Non-Privileged).pst

Here is our forecast

 Message-ID: <15464986.1075855378456.JavaMail.evans@thyme>

如何选择文字

Here is our forecast 

在“X-FileName ....\n”之后直到“Message-ID”被排除?

我阅读了前瞻和后视并尝试了这个但没有奏效:

(?<=X-FileName:(\n)+$).+(?=Message-ID:)

【问题讨论】:

您可以使用s.split("\n\n")[1]。或re.search(r'X-FileName:.*[\r\n]+(.+)', s).group(1) @WiktorStribiżew 第二个有什么问题吗? 我不了解 Python,但在大多数语言中,上面的 $ 指的是整个字符串的结尾,而不是后面的结尾。实际上,您甚至不允许在编译时不知道后向字符串的长度的情况下进行后向检查(在这种情况下由于+ 而不是)。 【参考方案1】:

应该这样做:

(?:X-FileName:[^\n]+)\n+([^\n]+)\n+(?:Message-ID:)(第 1 组是比赛)

Demo

解释:

(?:X-FileName:[^\n]+) 匹配 X-Filename: 后跟任意数量的非换行符,而不捕获它 (?:)。

\n+ 匹配任意数量的连续换行符。

([^\n]+) 匹配并捕获任意数量的非换行符的连续字符。

\n+ 再次匹配任意数量的连续换行符。

(?:Message-ID:) 匹配 Message-ID: 而不捕获它 (?:)。

编辑:正如@WiktorStribiżew 提到的那样,将文本分成几行可能是检索所需内容的更简单/更清晰的方式。

【讨论】:

行包含 X=Filename 和 Message-ID 被排除在外。 第 1 组正好包含“这是我们的预测”(demo 上的绿色)。不是你要求的吗?【参考方案2】:

这里有两种方法,它们取决于更广泛的背景。如果您预期的子字符串是第二段,只需使用\n\n(或\r\n\r\n)拆分并从结果列表中获取第二项。

如果是较大文本中的文本,请使用正则表达式。

查看 Python 演示:

import re
s='''X-FileName: pallen (Non-Privileged).pst

Here is our forecast

Message-ID: <15464986.1075855378456.JavaMail.evans@thyme>'''
# Non-regex way for the string in the exact same format
print(s.split('\n\n')[1])
# Regex way to get some substring in a known context
m = re.search(r'X-FileName:.*[\r\n]+(.+)', s)
if m:
    print(m.group(1))

正则表达式的意思是:

X-FileName: - 文字子串 .* - 除换行符以外的任何 0+ 个字符 [\r\n]+ - 1 个或多个 CR 或 LF 字符 (.+) - 第 1 组:一个或多个除换行符以外的字符,尽可能多。

请参阅regex demo。

【讨论】:

re模块

正则表达式正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符... 查看详情

正则表达式(代码片段)

定义:正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",... 查看详情

#19re&jieba模块(代码片段)

...,所有这一节记录两个强大的文本处理模块,一个是正则表达式re模块,另一个是中文处理模块jieba,Herewogo!一、re模块re模块的出现使得Python完全支持正则表达式,在学re模块之前,先来认识一下正则表达式正则表达式使用单个... 查看详情

正则表达式:匹配文本段落中除特定短语外的所有内容

】正则表达式:匹配文本段落中除特定短语外的所有内容【英文标题】:Regex:Matcheverythingintextparagraphexceptspecificphrases【发布时间】:2018-07-0512:19:55【问题描述】:我正在为GoogleDocs编写一个免费插件并处理文本段落。我需要一个... 查看详情

正则表达式使用(代码片段)

简介   正则表达式是对字符串(包括普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则... 查看详情

正则表达式:匹配除特定模式之外的所有内容

】正则表达式:匹配除特定模式之外的所有内容【英文标题】:Regex:matcheverythingbutspecificpattern【发布时间】:2010-12-1320:14:30【问题描述】:我需要一个能够匹配所有内容的正则表达式但是一个以特定模式开头的字符串(特别是ind... 查看详情

自然语言处理(nlp)入门

...在文本数据上执行的一些基本操作    正则表达式:对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的... 查看详情

linux查找并输出特定行和它的前一行且在后面再输出一个空白行的命令

...统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是globalregularexpressionprint,表示全局正则表达式版本,它的使用权限是所有用户。2.格式grep[options]3.主要参数[options]主要参... 查看详情

正则表达式

 grep命令和正则表达式一、正则:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑... 查看详情

特定中文字符串正则匹配

...,如“丽乡”解决过程:之前知道匹配中文字符串,正则表达式中使用的是unicode编码的范围,如/^[x{4e00}-x{9fa5}]+$/u想着特定字符是否可以不用转换成unicode编码,于是写出正则 ‘/^[美]{0,1}[丽]{0,1}[乡]{0,1}[村}]{ 查看详情

php正则表达式是啥?

...配一系列符合某个句法规则的字符串的单个字符串。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的... 查看详情

正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个‘规则字符串’用来表达对字符串的一种过滤逻辑。给定一个正则表达式和... 查看详情

正则表达式匹配不是特定子字符串的内容

】正则表达式匹配不是特定子字符串的内容【英文标题】:Regextomatchagainstsomethingthatisnotaspecificsubstring【发布时间】:2010-09-0718:20:57【问题描述】:我正在寻找一个正则表达式,它将匹配以一个子字符串开头且不以某个子字符串... 查看详情

正则表达式

1、概念:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。换句话说,正则表达式就... 查看详情

正则表达式必知必会3/10

第一章正则表达式入门正则表达式(Regularexpression,简称regex)查找特定的信息(搜索),查找并编辑特定的信息(替换)。正则表达式是一些用来匹配和处理文本的字符串,是由正则表达式语言创建的。与其他程序设计语言一... 查看详情

正则表达式简明笔记

正则表达式描述了一种字符串的匹配模式,可以用来检查一个串是否含有某子串,或是特定字符串是否匹配特定规则.换句话说就是记录文本规则的一段代码。其目的在于精确地过滤字符,找到想要的字符。历史:正则表达式的第一... 查看详情

正则表达式匹配特定长度的字符串,中间有空格(任何地方)

】正则表达式匹配特定长度的字符串,中间有空格(任何地方)【英文标题】:Regextomatchspecific-lengthstringwithwhitespaceinthemiddle(anywhere)【发布时间】:2016-07-2920:47:30【问题描述】:我需要一个匹配短语(具有特定长度和结构)的正... 查看详情

如何使用正则表达式查找具有特定起始字符串的所有匹配项? [复制]

】如何使用正则表达式查找具有特定起始字符串的所有匹配项?[复制]【英文标题】:Howtousearegularexpressiontofindallmatcheswithspecificstartingstrings?[duplicate]【发布时间】:2020-03-0911:38:10【问题描述】:我已经使用bs4爬取了一些文本,我... 查看详情