如何将这些字符串与正则表达式匹配?

时间:2019-01-25 17:17:17

标签: python regex

我正在尝试仅使用此输入匹配名称:

5 OK 377035 F 17949 , RICHARDS/PATRICIA MARIE A 15/01/19 2878-578482-3
6 OK 377599 F 13282 , ZARATE/NICOLAS A 38586778 15/01/19 2878-578486-0
7 OK 378583 F 23296 /*/*/*/, ASTAIRE/LUCY JANE A 17/01/19 3165-841179-4

这是到目前为止的代码:

import re, pyperclip, pprint

nombres = pyperclip.paste()

nombresReg = re.compile(r'\b\w+\b\s*/*,*\s*\b\w+\b\s?\b\w+\b')
mo = nombresReg.findall(nombres)
pprint.pprint(mo)

这是我得到的输出:

['5 OK 377035',
 'RICHARDS/PATRICIA MARIE',
 '01/19 2878',
 '3\r\n    6 OK',
 '377599 F 13282',
 'ZARATE/NICOLAS A',
 '01/19 2878',
 '0\r\n    7 OK',
 '378583 F 23296',
 'ASTAIRE/ LUCY JANE',
 '01/19 3165']

如您所见,它与名称匹配,但是它让我很讨厌...我已经尝试了好几天。

任何输入将不胜感激!

2 个答案:

答案 0 :(得分:1)

来自,\s*(.*?)\s\w\s

第1组将匹配唯一的逗号和一个字母后的所有内容,例如: RICHARDS / PATRICIA MARIE ZARATE / NICOLAS 和< em> ASTAIRE / LUCY JANE 。

答案 1 :(得分:0)

此模式似乎正是您要寻找的:

>>> pat = re.compile("[A-Z]+/([A-Z ]+ )+")
>>> s = '''5 OK 377035 F 17949 , RICHARDS/PATRICIA MARIE A 15/01/19 2878-578482-3
... 6 OK 377599 F 13282 , ZARATE/NICOLAS A 38586778 15/01/19 2878-578486-0
... 7 OK 378583 F 23296 /*/*/*/, ASTAIRE/LUCY JANE A 17/01/19 3165-841179-4
... '''
>>> pat.findall(s)
['PATRICIA MARIE A ', 'NICOLAS A ', 'LUCY JANE A ']
>>> 

说明:“ [[AZ] + /([AZ] +)+]”匹配一个或多个大写字母([A-Z]+,后跟文字斜杠(/),后跟一个序列一组或多组大写字母,必须用一个空格(([A-Z ]+ )+)分隔。