正则表达式预测用户名:并匹配后面的单词,直到行结束[关闭]


1

我正在尝试编写正则表达式以预测用户名:并匹配后面的单词直到行尾:

正则表达式是:

^(?=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
那么你的问题是什么?
music2myear

Answers:


-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.+)$

你可以测试一下 这里


0

你想要的并不是很清楚。

我将您的示例文本放入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/'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.