繁体   English   中英

正则表达式匹配 - Python - 任意数量的字符

[英]Regex match - Python - any amount of characters

找不到看起来像我正在寻找的示例。

我正在尝试在 FAA 航空航行通告中捕获 ASN 编号。 下面的例子:

示例文本

2019-AWP-7268-OE

正则表达式匹配(findall)

\d{4}-(?:AAL|ACE|AEA|AGL|ANE|ANM|ASO|ASW|AWP|WTE|WTW)-(?:\d{3,6})-(?:OE|NRA)

但是,我也想在发出多个时捕获它:

  • 2019-AWP-659 通 662-NRA
  • 2019-AWP-3823/3825-NRA
  • 2019-AWP-4593/4594/4595/4596-NRA
  • 2019-ASW-4791、4794 通 4796、4798 通 4800-NRA

我试图制作一个表达式,其中任何数量的字符但表达式以 OE/NRA 结尾。 有没有办法匹配年份(2019)、地区(ASW|AWP)、任何文本(3823/3825) ,然后是类型(OE|NRA)?

我会使用这样的东西:

r'((\d{4})-(AAL|ACE|AEA|AGL|ANE|ANM|ASO|ASW|AWP|WTE|WTW)-([^-]+)-(OE|NRA))'

其中,当作为re.findall()的键时,应该生成一个嵌套列表,其中外部列表包含每个大匹配项,内部列表包含每个匹配项中的四个子匹配项(作为元素 1、2、3 , 和 4 分别是元组;元素 0 是完整的单一模式匹配)。

此后,您可以对正则表达式操作或其他一些操作进行另一次迭代,特别是在匹配的任何文本部分,以准确隔离哪些 ID 或您正在处理的任何内容。

要匹配任何文本,您还可以使用.* ,它将匹配到行尾,然后回溯以匹配-的最后一次出现,然后匹配OENRA

您可以通过向字符 class (如A[AG]L添加一些字符来缩短交替时间,以匹配AALAGL

请注意,您不需要(?:\d{3,6})周围的非捕获组

^(\d{4})-(ACE|AEA|A[AG]L|AN[EM]|AS[WO]|AWP|WT[EW])-(\d{3,6}.*)-(OE|NRA)$

正则表达式演示

如果没有锚,您可以使量词不贪婪并使用单词边界:

\b(\d{4})-(ACE|AEA|A[AG]L|AN[EM]|AS[WO]|AWP|WT[EW])-(\d{3,6}.*?)-(OE|NRA)\b

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM