正则表达式向前看用户名:并匹配后面的单词直到行尾

正则表达式向前看用户名:并匹配后面的单词直到行尾

我正在尝试编写正则表达式来提前查找用户名:并匹配后面的单词直到行尾:

正则表达式是:

^(?=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

答案1

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

  • (?=User name:)您需要的是后视,而不是前视:
    (?<=User name:)
  • ^(?=User name:)- 后向查找将在开头进行搜索,无论您将其放在表达式中的什么位置,因此它会查找“用户名:”,后面跟着行首和一些空格。还包括行首:
    (?<=^User name:)
  • 将您的名字放在括号中,以便更容易捕获:
    ([A-Za-z]+)
  • [A-Za-z]您的名字中也可以有空格,甚至一些带重音的字母,我会像这样修改它:(
    (\S.+)
    一个无空格字符(后面是空格)后跟所有内容直到行尾)

整个表达式为: (?<=^User name:)\s*(\S.+)$

您可以测试这里

答案2

目前还不清楚你想要什么。

我将您的示例文本放入 text.txt 文件中。

如果你只是想 grep 该行,那么有以下解决方案:

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/'

相关内容