如何使用RegEx在给定模式后的行尾找到字符串

问题描述:

目标是:从文本中删除不是名称或ID的所有内容。如何使用RegEx在给定模式后的行尾找到字符串

例子:

Paula Abdul @PaulaAbdul Dec 25 18:13:07 +0000 (GMT) via XYZ Web Client 
(... Some junk line to remove ...) 
Michael Jackson @MichaelJackson Dec 27 16:03:01 +0000 (GMT) via XYZ Web Client 
(... Other stuff to remove/e.g. an empty line) 
George Michael @GeorgeMichael Dec 28 19:23:15 +0000 (GMT) via XYZ Web Client 

目标是提取名称和ID:

Paula Abdul @PaulaAbdul 
Michael Jackson @MichaelJackson 
George Michael @GeorgeMichael 

什么是最好的办法呢? 我的想法是: 1.选择不包含所有行“@ ...” 2.选择一切之后“@ ...”的行结束

到目前为止,我知道:

Ignore all Lines with <string>: ^(([email protected]<string>).)*$ 

我该如何将两种搜索结合到一起?

i assume: <pattern1>|<pattern2> 

我使用https://atom.io编辑我的正则表达式搜索。

+0

模式*不包含 “@PaulaAbdul” |选择“@PaulaAbdul”后的所有内容*将与'@ MichaelJackson'和'@ GeorgeMichael'匹配# – RomanPerekhrest

+0

你只想匹配'@'? – guest271314

+0

你需要指定你真正期望的结果。而且你需要告诉我们什么(在你的定义中)是一个名字或ID – Wolfgang

好吧,我发现了一些研究和试验和错误后的解决方案。

首先,我找到的代码如何识别Twitter的标识:regex for Twitter username

@[\w{1,15}]+ 

这个发现,以“@”开始,有1-15个字符之间的任何标识。 “\ w”代表“单词字符”,通常为[A-Za-z0-9_]。注意包含下划线和数字。

通过试验和错误,我发现图案的其余部分:

^[\w. ]*(@[\w{1,15}]+)\b 

此发现包括任何数量的单词“”和“”。只要有一个“@”+至少一个单词字符。

示例源:

@PaulaAbdul Dec 25 18:13:07 +0000 (GMT) via XYZ Web Client 
(... Some junk line to remove ...) 
Clint. @PaulaAbdul Dec 25 18:13:07 +0000 (GMT) via XYZ Web Client 
abcdef.abcd 999 (... Some junk line to remove ...) 
Paula Abdul @PaulaAbdul Dec 25 18:13:07 +0000 (GMT) via XYZ Web Client 
Some Words (... Some junk line to remove ...) 
Michael M. Jackson @MichaelJackson Dec 27 16:03:01 +0000 (GMT) via XYZ Web Client 
(... Other stuff to remove/e.g. an empty line) 
George Michael @GeorgeMichael Dec 28 19:23:15 +0000 (GMT) via XYZ Web Client 

结果:

@PaulaAbdul 
Paula Abdul @PaulaAbdul 
Michael M. Jackson @MichaelJackson 
George Michael @GeorgeMichael