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

2024-04-19 16:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

找不到与我正在查找的类似的示例

我正试图在联邦航空局航空通告中获取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)


Tags: 文本航空示例表达式编号oe联邦asn
2条回答

我会用这样的方式:

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

您可以通过向字符类(如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)$

Regex demo

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

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

Regex demo

相关问题 更多 >