正则表达式找到“姓氏名字”

时间:2015-10-04 17:46:26

标签: regex grep

我们的文件只包含带空格和名字的姓氏。

该文件如下所示:

Alex Roni
ToMmy Rid
Christian Olav
JohHn PeTter
Flara Sbastian
Hovard Kai
Runne Nervin
OlaAf RoOni
Olaf Roni

我们想以4种方式grep这个文件。

首先,我们希望它能找到任何姓氏姓氏以N,O,P,Q,R开头。

我写下面的代码:

(^[N-R]) 

第二个找到名字和姓氏都正好是4个字母。

我写下面的代码。但似乎不起作用。它必须grep Olaf Roni

(^[N-R]{4}+)([N-R]{4}+)

第3个名字和姓氏不包含s。这是正确的,也可以。

^[^s]*$

4rd find lastname包含MacDonald中的两个大字符。第二个大字符可以出现在名称的任何地方。

此代码也不起作用。

^(.*?[A-Z]{2,}.*)+(.*?[A-Z]{2,}.*)$

3 个答案:

答案 0 :(得分:2)

您可以使用前瞻:

^(?=\w{4}\s\w{4}$)[N-R].*

Demo

/ [NR] /的正则表达式只匹配N,O,P,Q,R范围内的一个字符。如果使用[NR] {4},则表示要匹配4个字符范围,例如NNNN将匹配。

对于您描述的名称,您需要:

[N-R][a-zA-Z]{3}

 ^^^              One letter in the range N-R
       ^^^        an ASCII letter
              ^^  proceeding match 3 times

因此,用空格分隔的两个适合该模式的名称将是:

^[N-R][a-zA-Z]{3} [N-R][a-zA-Z]{3}$

Demo

然后,您可以为您描述的其他约束添加额外的前瞻。在RexEgg HERE.

上有一个关于正则表达式前瞻的很棒的篇幅

答案 1 :(得分:1)

试试这个:

.* (.*[A-Z].*[A-Z].*)

http://rubular.com/r/wuWMKFJlir

答案 2 :(得分:0)

Following is expression

^(([N-R][\w]{3}(\s?)){2})$

Demo:

https://regex101.com/r/wM2oE4/9