我正在尝试解析包含名称和学位的字符串。我有很多这些。有些不包含度,有些包含一个,有些包含多个。
示例字符串:
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')
我将如何解析这个?
我是regex的新手并且打破这个问题已经证明非常耗时。我一直在使用此post并尝试split = re.split('\s+|([.])',s)
和split = re.split('\s+|\.',s)
,但这些仍然在第一个空格中分开。
在回答第一条评论时,我想到了关于学位名称的问题。我一直试图制作一个识别'x.x'然后是通配符的正则表达式,因为在度数内有几个模式看起来像这样:x.x(某事): 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 :(得分: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)
答案 1 :(得分:0)
你可以用这个:
'[ ](MA|RN|([A-Z][a-z]?[a-z]?\.){2,3})'
它不带任何一个点