在两个单词之间应用正则表达式

Apply regex between two words

本文关键字:单词 之间 应用 正则表达式 两个      更新时间:2023-09-26

我需要确认在我的文本的一部分之间是否存在一个's01's,所以我需要一个分隔符。

我有这么大的文字:

...
RESUMO DO FECHAMENTO - EMPRESA MODALIDADE : "BRANCO"-RECOLHIMENTO AO FGTS E DECLARAÇÃO À PREVIDÊNCIA 858600000039 672701801102 107527053051 769205500015 Nº ARQUIVO: NmDA0FH71Ig0000-3 Nº DE CONTROLE: BdmBPppCuyu0000-1 INSCRIÇÃO: 57.692.055/0001-27 COMP: 11/2010 COD REC:115 COD GPS: 2100 FPAS: 612 OUTRAS ENT: 3139 SIMPLES: 1 RAT: 3.0 FAP: 1.57 RAT AJUSTADO: 4.71 TOMADOR/OBRA: INSCRIÇÃO: LOGRADOURO: AVENIDA ALEXANDRE COLARES 500 3 ANDAR BAIRRO: VILA JAGUARA CNAE PREPONDERANTE: 4930202 CIDADE: SAO PAULO UF: SP CEP: 05106-000 CNAE: 4930202 CAT QUANT REMUNERAÇÃO SEM 13º REMUNERAÇÃO 13º BASE CÁL PREV SOC BASE CÁL 13º PREV SOC 07 2 1.100,35 429,09 1.100,35 0,00
...

在这篇特别的文章中,我需要确认是否存在 01 和 07,但如果 01 不存在,则正则表达式正则表达式试图在文本的其他部分捕获,如下所示:http://regexr.com/3d03m

我怎样才能使正则表达式仅在这两个词之间工作?可能吗?

正则表达式:(?: RESUMO DO FECHAMENTO - EMPRESA MODALIDADE : "BRANCO")(.*? 01 )(?:.*?(?=TOTAIS:))

您遇到的问题是.*? - 尽管称为"懒惰"或"不情愿" - 仍然尝试匹配尽可能多的字符以返回有效的匹配。由于.匹配除换行符以外的任何字符,因此它匹配前导多字符分隔符(以及尾随分隔符)。

如果您有 1 个字符的分隔符,如 [] ,您将使用否定字符类[^']'[]*而不是 .*? 。在这里,您可以使用温和的贪婪令牌:

(?:(?!TOTAIS:).)*

查看正则表达式演示

若要支持多行文本,必须将.替换为 ['s'S]

但是,此解决方案相当耗费资源,因为我们基本上检查每个位置,如果它开始序列 TOTAIS: ,我们将停止匹配。更有效的方法是展开此令牌,例如:

[^T]*(?:T(?!OTAIS:)[^T]*)*

查看另一个正则表达式演示

此版本也跨换行符匹配。它匹配 T 以外的 0* 个字符,然后匹配 0* 个T序列,该序列后不跟 OTAIS: 后跟 0* 出现的 T 以外的字符。但是,它无法检查TOTAIS是否是一个完整的单词。

我不

明白你想做什么..对不起..但是根据您的标题"在两个单词之间应用正则表达式"的内容,我假设,如果"01"和"07"来了,你想在两者之间加上逗号。如果是这样的话,那么它将是:(Perl)

s/(

01)''s+(07)/''1,''2''3/g;