2013-07-02 52 views
4

我想解析一個包含名稱和學位的字符串。我有很長的這些列表。有些不包含學位,有些包含一個,有些包含多個。解析名稱和程度?

例字符串:

Sam da Man J.D. 
Green Eggs Jr. Ed.M. 
Argle Bargle Sr. MA 
Cersei Lannister M.A. Ph.D. 

據我所知道的,進來以下模式的程度:

x.x. 
x.x.x. 
x.x.xx. 
x.xx. 
xx.x. 
x.xxx. 
two caps (ex: 'MA') 

我將如何解析呢?

我是新來的正則表達式和打破這個問題已被證明非常耗時。我一直在使用這個post並嘗試split = re.split('\s+|([.])',s)split = re.split('\s+|\.',s)但這些仍然分裂在第一個空間。

爲了迴應第一條評論,我曾考慮過關於學位的指定。我一直試圖製作一個正則表達式來識別'x.x',然後是一個通配符,因爲度數中有幾個模式,如下所示:x.x(something): x.x. x.x.x. x.x.xx.

然後我會再分類。

另外,分類名稱可能會更容易?

甚至列出集合中的度數並搜索它們?

{'M.A.T.','Ph.D.','MA','J.D.','Ed.M.', 'M.A.', 'M.B.A.', 'Ed.S.', 'M.Div.', 'M.Ed.", 'RN', 'B.S.Ed.'} 
+0

也許你可以做一個正則表達式來識別程度後綴? – GWW

+4

不要忘記英國牛津大學博士學位 - 英國牛津大學博士學位 – Bathsheba

+0

讓我檢查一下是否有。 1秒。 – goldisfine

回答

0

試圖改變自己的 「小」, 「老」 ......像這樣的東西代替它們: 「JR〜」, 「SR〜」,... 這是常規表達了這樣做:

/ (Jr|Sr)\./$1~ /g 

(見here

你獲得這個字符串:

Sam da Man J.D. 
Green Eggs Jr~ Ed.M. 
Argle Bargle Sr~ MA 
Cersei Lannister M.A. Ph.D. 

現在,您可以輕鬆地捕獲度的正則表達式:

/ (MA|RN|([A-Z][a-z]?[a-z]?\.)+) /g 

(見here

0

您可以使用此:

'[ ](MA|RN|([A-Z][a-z]?[a-z]?\.){2,3})' 

它不帶任何字與一個點