我的正则表达式也可以找到here ,尽管我手动插入字符以查找回车符。
((?:\d{6}?)([A-Z\d]{3})?(?:[\^r\ ]+)(([A-Z\d]{6}|[A-Z\d]{5} |[A-Z\d]{4} ))?)
我在 5 和 4 个字符的字符串后指定了一个空格,但我的正则表达式似乎至少在第一行忽略了它。它匹配“扩展”,即使我不希望它匹配。只有后面有空格。它在第三行使用“XOBUS”工作。
FPCN54 CWNT 080810^r^r EXTENDED FORE #should not match anything
ASUS42 KMHX 080425^r^r RWRMHX^r^r WEAT #should match RWRMHX
RXUS30 KWNO 081300^r^r XOBUS ^r^r GREA #should match XOBUS w/ 1 trailing space
FXUS64 KEWX 081112 RR3^r^r AFDEWX^r^r #should match RR3 and AFDEWX
编辑:忘记在第一个回车前包含 3 个字符的字母数字。请参阅第 4 行。还需要捕获它。
请您参考如下方法:
根据您上面想要的输出,您使正则表达式过于复杂。 **顺便说一句,上面你说的是“5 或 4 个字符的字符串”,但在你想要的输出中,你有一个“6”个字符串和一个 3 个字符的字符串。
>>> import re
>>> string = '''FPCN54 CWNT 080810^r^r EXTENDED FORE #should not match
anything
ASUS42 KMHX 080425^r^r RWRMHX^r^r WEAT #should match RWRMHX
RXUS30 KWNO 081300^r^r XOBUS ^r^r GREA #should match XOBUS w/ 1 trailing
space
FXUS64 KEWX 081112 RR3^r^r RR3555^r^r AFDEWX^r^r #should match RR3, RR3555, and AFDEWX'''
>>> re.findall('(?m)([\d]*[A-Z]+(?:[A-Z]*[\d]*)*[\s]*)[\^r]{2,}', string)
#OUTPUT
['RWRMHX', 'XOBUS ', 'RR3', 'AFDEWX', 'RR3555']
