Regex para lookahead User name: e corresponde a palavra por trás até o final da linha [closed]

1

Estou tentando escrever o Regex para conferir o nome do usuário: e relacionar a palavra por trás até o final da linha:

O regex é:

^(?=User name:)\s*\[A-Za-z]+

e o texto é:

Action:         NEW

User name:      Matthew Thomas
Job title:      Dealer Account Manager
Direct report:      Craig Carlson
Department:         Dealer Account Management
Location:       Milton, QLD
Employment type:    Permanent Full Time
Start date:         15/07/2013
Finish date:


__________________________________________
Decision Point 3
--------------
Read Only
por Osama Kadhim 15.11.2017 / 06:34

2 respostas

-1

^(?=User name:)\s*\[A-Za-z]+

  • (?=User name:) o que você precisa é lookbehind, not lookahead:
    (?<=User name:)
  • ^(?=User name:) - lookbehind pesquisará no início, independentemente de onde você o colocou em sua expressão, por isso está procurando por "Nome do usuário:" seguido pelo início da linha e alguns espaços. Inclua o início da linha também:
    (?<=^User name:)
  • coloque seu nome entre colchetes, então será mais fácil capturá-lo:
    ([A-Za-z]+)
  • [A-Za-z] também pode haver espaços no seu nome, ou até mesmo algumas letras com sotaque, eu modifico assim:
    (\S.+)
    (nenhum caractere de espaço (seguindo espaços em branco) seguido de tudo até o final da linha)

Toda a expressão é: (?<=^User name:)\s*(\S.+)$

Você pode testar aqui .

    
por 15.11.2017 / 09:32
0

Não está muito claro o que você quer.

Eu coloquei seu texto de exemplo no arquivo text.txt.

Se você quiser simplesmente aproveitar a linha, existe a solução:

grep -E "^User name:\s*[A-Za-z ]+$" text.txt
User name:      Matthew Thomas

Se você quiser apenas o nome, podemos aprimorar o comando com sed:

grep -E "^User name:\s*[A-Za-z ]+$" text.txt | sed -e '1,$s/^User name:\s*\([A-Za-z ]*\)$//'
    
por 15.11.2017 / 08:47

Tags