Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Regex始终匹配最后一个group子句_Python_Regex - Fatal编程技术网

Python Regex始终匹配最后一个group子句

Python Regex始终匹配最后一个group子句,python,regex,Python,Regex,我有这根绳子 AC7640蒙特利尔特鲁多(YUL)拉瓜迪亚/纽约(LGA)E75业务(p)已确认 我希望它与AC、7640、YUL和LGA 但如果最后一个机场不存在,我也想匹配,例如: AC7640蒙特利尔特鲁多(YUL)E75业务(p)已确认 AC,7640和YUL 我想出了这个正则表达式: ([A-Z]{2}}[A-Z][0-9]{0-9][A-Z])\s*([0-9]{1,4})(?:.*([A-Z]{3}){1,2} 问题是它在两个字符串上只匹配1个机场 我正在使用python fl

我有这根绳子

AC7640蒙特利尔特鲁多(YUL)拉瓜迪亚/纽约(LGA)E75业务(p)已确认
我希望它与
AC
7640
YUL
LGA

但如果最后一个机场不存在,我也想匹配,例如:

AC7640蒙特利尔特鲁多(YUL)E75业务(p)已确认

AC
7640
YUL

我想出了这个正则表达式:
([A-Z]{2}}[A-Z][0-9]{0-9][A-Z])\s*([0-9]{1,4})(?:.*([A-Z]{3}){1,2}

问题是它在两个字符串上只匹配1个机场

我正在使用python flavor

您需要“展开”模式,因为重复的捕获组只存储最后一次出现:

^([A-Z]{2}|[A-Z][0-9]|[0-9][A-Z])\s*([0-9]{1,4}).*?\(([A-Z]{3})\)(?:.*?\(([A-Z]{3})\))?
看。另外,请注意最后一部分,
(?:.*?\([A-Z]{3})\)?
,包含一个可选的非捕获组,以便它可以匹配1个或0个事件<代码>^开头使正则表达式引擎仅从字符串开头搜索

详细信息

  • ^
    -字符串的开头
  • ([A-Z]{2}|[A-Z][0-9]|[0-9][A-Z])
    -第1组:两个大写字母或一个大写字母和一个数字或一个数字和一个大写字母
    • \s*
      -0+空格
    • ([0-9]{1,4})
      -第2组:一到四位数字
  • *?
    -任何0+字符尽可能少,直到第一个字符
  • \(
    -a
  • ([A-Z]{3})
    -第3组:三个大写字母
  • \)
    -
  • (?:.*?\([A-Z]{3})\)?
    -与以下事件的1或0(可选)匹配的非捕获组:
    • *?
      -任何0+字符尽可能少,直到第一个
    • \(
      -a
    • ([A-Z]{3})
      -第4组:三个大写字母
    • \)
      -a

我喜欢它,虽然有一些小的修正([A-Z]{1,3})应该是
([A-Z]{3})
在这两种情况下都是可能的,但我看到机场代码可以是1个字符长。嗯,那是可以改编的。啊哈,我现在懂了。在第二种情况下,不应返回
P