2014-11-25 63 views
1

我试图写的正则表达式的标识名称与正则表达式,用于提取名称以先生|夫人

Mr.|Mrs. 

启动例如

Mr. A, Mrs. B. 

我试了好几种表情。这些正则表达式通过在线工具在pythonregex.com上进行检查。所使用的测试字符串是:

"hey where is Mr A how are u Mrs. B tt`" 

输出提到顷的Python findall()功能,即

regex.findall(string) 

及其与regex各自的输出如下。

Mr.|Mrs. [a-zA-Z]+ o/p-[u'Mr ', u'Mrs'] 

为什么A和B没有出现先生和夫人?

[Mr.|Mrs.]+ [a-zA-Z]+ o/p-[u's Mr', u'. B'] 

为什么要用先生来代替A?

我尝试了更多的组合,但这些都让人困惑,所以这里是他们。对于名称部分,我知道正则表达式必须涵盖更多条件,但是从基本开始。

+1

'[先生|夫人] +'完全错误。 – 2014-11-25 07:01:51

+0

点在正则表达式中有特殊含义。把它变成'\ .'好用'夫人?\。' – Braj 2014-11-25 07:02:02

+0

预期输出是什么? – thefourtheye 2014-11-25 07:02:59

回答

3

改变你的正则表达式如下图所示,

(?:Mr\.|Mrs\.) [a-zA-Z]+ 

DEMO

  1. 你需要把Mr\.Mrs\.非捕获或捕获组内,使|(OR)适用于组本身。
  2. 您必须在您的正则表达式中转义点以匹配文字点或其他字符,否则它将匹配任何字符。 .是正则表达式中特殊的元字符,它匹配除换行符之外的任何字符。

OR

即使较短,

Mrs?\. [a-zA-Z]+ 

?量词在上述使得以前的字符s作为任选一个。

+0

谢谢。这非常有帮助。 – fhulprogrammer 2014-11-26 09:26:49

+0

接受,如果这有帮助。 – 2014-11-26 09:28:30