没有指定空格的RegEx匹配字符

时间:2019-04-22 17:01:39

标签: python regex

尽管我手动插入了字符以寻找回车符,但我的RegEx也可以找到here

((?:\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行。也需要捕获它。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

This RegEx可能会帮助您执行精确匹配,并且根据需要将字符串输入分成几组,并重建目标输出:

Left panel/Project tree

您可以删除所需的任何组color,并且该组仍将匹配。

RegEx

您可以根据需要减少边界。