[英]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.