[英]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)
但是,我也想在发出多个时捕获它:
我试图制作一个表达式,其中任何数量的字符但表达式以 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 或您正在处理的任何内容。
要匹配任何文本,您还可以使用.*
,它将匹配到行尾,然后回溯以匹配-
的最后一次出现,然后匹配OE
或NRA
您可以通过向字符 class (如A[AG]L
添加一些字符来缩短交替时间,以匹配AAL
或AGL
请注意,您不需要(?:\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.