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

1

Eu estou tentando escrever Regex para lookahead User name: e corresponder 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

Osama Kadhim
fonte
1
Então, qual é a sua pergunta?
music2myear

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 parênteses, então será mais fácil capturá-lo:
    ([A-Za-z]+)
  • [A-Za-z] pode haver também espaços em seu nome, ou até mesmo algumas letras com sotaque, eu modifico assim:
    (\S.+)
    (um caractere não espacial (seguintes espaços em branco) seguido de tudo até o final da linha)

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

Você pode testar é Aqui .

Máté Juhász
fonte
0

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

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

Se você simplesmente quer entender 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 melhorar o comando com sed:

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