uma representação de string usando regex (modificado)

1

Eu gostaria de usar a expressão regular para representar um padrão com o seguinte tipo de características

1) Inclui uma sequência contínua de valores de dígitos. O comprimento desta seqüência, pelo menos, 1

2) Há pelo menos um caractere não-dígito antes do primeiro dígito da seqüência acima, ou após o último dígito da seqüência acima, ou ambos antes e final. Portanto, a expressão regular deve corresponder aos seguintes exemplos:

A123
A123B
#A123BNNN
.123
-123+

Por outro lado, AB123B123 está além do escopo do padrão acima, pois possui duas sequências de valores de dígitos. Esta questão não precisa considerar este cenário. Espero ter esclarecido essa questão.

    
por user288609 13.11.2013 / 22:27

3 respostas

1

Isso parece fazer o que você deseja usando grep :

$ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt

Adicionar linhas adicionais a data.txt parece indicar que isso está funcionando de acordo com seus requisitos.

Exemplo

$ cat data.txt 
&320
*10-
AB123-
1234
ABCDEF
a20d34
12a12
32q5858j
' 2323 '
234aaa
#A123BNNN
.123
-123+

Execução da amostra:

$ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt
&320
*10-
AB123-
' 2323 '
234aaa
#A123BNNN
.123
-123+

Se você não estiver familiarizado com a opção grep -P , consulte a referência abaixo. O switch permite que grep use muito do mecanismo regex disponível em Perl.

Referências

por 13.11.2013 / 22:52
1

Sua descrição parece se resumir a um não dígito seguido por um dígito ou um dígito seguido por um não dígito.

grep -e '[^0-9][0-9]' -e '[0-9][^0-9]'
    
por 13.11.2013 / 22:50
0
sed '
    /^[^0-9]\+[0-9]/b    # at least non-digit either before the first digit
    /[0-9][^0-9]\+$/b    # or after the last digit
    d
'

(editar: não precisa lidar com o caso de nenhum dígito, isso é descartado pela declaração do problema.

    
por 14.11.2013 / 06:27