Eu tenho uma lista e aqui está um trecho de exemplo:
Newii
27,807,147
Supd
26,518,465
Ns.
26,175,538
Mai
24,930,812
Gas
0623,901,055
TEim
20,213,631
Tes
GrV
18,968,412
Mytyttyst
y
htththt
hyhyh
October 2013
/////////////////////////
Quero marcar as linhas entre 18,968,412
e October 2013
sem incluir essas linhas. O seguinte regex funciona bem para combinar as linhas:
^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$)[\s\S]+?^\h*\S.*(?=\R+/{24})
Este regex coloca [\s\S]+?
entre ^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$)
e ^\h*\S.*(?=\R+/{24})
. No entanto, o problema é que ele também marca as próprias linhas do padrão.
A saída fica depois de aplicar o "marcador":
18,968,412
Mytyttyst
y
htththt
hyhyh
October 2013
Quero marcar apenas as linhas entre os dois padrões. Por exemplo, na lista acima, as linhas que devem ser marcadas são:
Mytyttyst
y
htththt
hyhyh
Alguém pode me ajudar a modificar o regex para que ele marque apenas as linhas entre os padrões, sem incluir as próprias linhas do padrão?
Observe que tentei seguir o regex, mas eles também não funcionaram!
(?<=^\d+(?:,\d+)*$\R)[^\R]*(\R(?!^\d+(?:,\d+)*$|\h*\S.*(?=\R/{24}))[^R]*)*(?=\R^\h*\S.*(?=\R/{24}))
(?<=^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$)\R)([\s\S]*?)(?=\R^\h*\S.*(?=\R+/{24}))
(?<=^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$)\R)[\s\S]*?(?=\R^\h*\S.*(?=\R+/{24}))
(?<=^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$))[\s\S]*?(?=^\h*\S.*(?=\R+/{24}))
Você pode usar
Veja a demonstração de regex .
Detalhes :
^\d+(?:,\d+)*\R(?=(?:(?!\d+(?:,\d+)*$).*\R)*/{3,}$)
- corresponde à última linha da sequência de dígitos separados por vírgula antes///
da linha semelhante\K
- descarta todo o texto correspondido até agora do buffer de memória de correspondência(?:(?!^/{3,}$)[\s\S])*?
- zero ou mais caracteres, o mínimo possível, cada um deles não é o ponto inicial de uma linha que consiste apenas em três ou mais barras(?=(?!/{3,}$).*\R/{3,}$)
- um lookahead positivo que requer que os seguintes padrões correspondam imediatamente à direita da localização atual:(?!/{3,}$)
- uma verificação que falha na partida se houver três ou mais barras até o final da linha.*
- uma linha inteira\R
- uma quebra de linha/{3,}$
- três ou mais/
caracteres até o final da linha.Veja a demonstração do NPP: