簡體   English   中英

在兩個單詞之間應用正則表達式

[英]Apply regex between two words

我需要確認文本的一部分之間是否存在一個\\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/ 3天03米

我怎么能讓正則表達式只在這兩個詞之間工作? 是否可以?

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

您遇到的問題是.*? - 盡管稱為“懶惰”或“不情願” - 仍然嘗試匹配盡可能多的字符以返回有效匹配。 作為. 匹配除換行符以外的任何字符,它匹配您的前導多字符分隔符(以及尾隨)。

如果您有 1 個字符分隔符,例如[] ,您將使用否定字符類[^\\]\\[]*而不是.*? . 在這里,您可以使用溫和的貪婪令牌:

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

查看正則表達式演示

為了支持多行文本, . 必須替換為[\\s\\S]

然而,這個解決方案相當消耗資源,因為我們基本上檢查每個位置,如果它開始TOTAIS:的序列,我們停止匹配。 一種更有效的方法是展開此令牌,例如:

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

查看另一個正則表達式演示

此版本也與換行符匹配。 它匹配比其他0 *字符T然后0 *一個序列T后面沒有與OTAIS:隨后用0 *出現比其他字符的T 但是,它無法檢查TOTAIS是否是一個完整的單詞。

我不明白你在做什么......抱歉......但是根據你的標題“在兩個詞之間應用正則表達式”,我假設,如果“01”和“07”出現,你想在它們之間加上逗號。 如果是這樣,那么它將是:(Perl)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM