Estou tentando criar uma expressão regular que corresponda a uma sequência de dígitos com 6 ou 7 dígitos.
[0-9]{6,7} Isso funciona, mas não quero uma correspondência em strings com mais de 7 dígitos.
Por favor, veja os dados de amostra abaixo com os dígitos em negrito que preciso corresponder. Algumas das strings de 6 a 7 dígitos têm vários caracteres no início e no final (novas linhas, tabulações, espaços) e também não quero combinar strings com dois ou mais 0 no início.
1139055 _00000000000000.jpg 1139065 _00000000000000.jpg
12345678 1045977 _00000000000000.jpg
_ 1162679 .jpg ID: 1099695 _20230615142941.jpg 1099692 _20230615142939.jpg 1162700 _00000000000000.jpg 012456 .psd Título: 0582457 _00_CC 01234567 89 Título : 6844393 _50_v2 Título: 6844393 _50_v2.psd 0001456789 0000001546800000
Total: 14 6582457 _00_C 5142090 _00_c Id: 1178287 Título : 6582457 _00_CC Título : 6844393 _50_v2 Id: 1178288 Título: _0042090_00_cc __ 6771292 _00_cc
Qualquer ajuda será apreciada.
Este regex parece fazer o trabalho para o seu exemplo:
(?:[^0-9]|^) : Certifique-se de que o início da linha ou que o caractere anterior não seja um número
((?:0[1-9]|[1-9]0|[1-9]{2})[0-9]{4,5}) : Obtenha os 6-7 dígitos sem 00 no início
(?:[^0-9]|$) : Certifique-se de que o final da linha ou que o caractere após não seja um número
Você pode brincar com ele em https://regex101.com/r/scZc9q/1
Como o primeiro/último caractere estaria na string correspondente, a maneira mais fácil de usar grep seria apenas remover esses caracteres com sed :
Então, para resumir, você deseja combinar dois dígitos decimais, pelo menos um dos quais deve ser diferente de zero, seguido por mais quatro ou cinco dígitos decimais, não precedidos ou seguidos por outros dígitos?
Nesse caso, use GNU grep no modo PCRE para as pesquisas:
Testando sua entrada com
-o
: