1

Я пытаюсь написать Regex, чтобы посмотреть имя пользователя: и сопоставить слово позади до конца строки:

Регулярное выражение:

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

и текст такой:

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

2 ответа2

0

Не совсем понятно, чего ты хочешь.

Я поместил ваш образец текста в файл text.txt.

Если вы просто хотите использовать строку, есть решение:

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

Если вам нужно только имя, мы можем улучшить команду с помощью sed:

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

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

  • (?=User name:) вам нужно смотреть назад, а не смотреть вперед:
    (?<=User name:)
  • ^(?=User name:) - lookbehind будет искать в начале, независимо от того, где вы поместите его в выражение, поэтому он ищет «Имя пользователя:», за которым следует начало строки и несколько пробелов. Включить начало строки тоже:
    (?<=^User name:)
  • поместите ваше имя в скобки, чтобы вам было проще его запечатлеть:
    ([A-Za-z]+)
  • [A-Za-z] могут быть также пробелы в вашем имени или даже некоторые буквы с ударением, я бы изменил это так:
    (\S.+)
    (символ без пробелов (после пробелов), за которым следует все до конца строки)

Целое выражение: (?<=^User name:)\s*(\S.+)$

Вы можете проверить здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .