首页 > 解决方案 > RegEx 匹配没有指定空格的字符

问题描述

我的 RegEx 也可以在此处找到,尽管我手动插入字符以查找回车符。

((?:\d{6}?)([A-Z\d]{3})?(?:[\^r\ ]+)(([A-Z\d]{6}|[A-Z\d]{5} |[A-Z\d]{4}  ))?)

我在 5 和 4 个字符串之后指定了一个空格,但我的正则表达式似乎至少在第一行忽略了它。即使我不希望它匹配“EXTEND”。只要后面有空格。它可以在第三行使用“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 行。也需要捕捉到这一点。

标签: pythonregex

解决方案


根据上面您想要的输出,您使正则表达式过于复杂。**顺便说一句,上面你说'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']

推荐阅读