Regex-查找多个可选变量

axr492tv  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(72)

我需要在一个长文本字符串中找到几个可选变量。这似乎是一个简单的问题,但我希望有一个更简单的解决方案,我得到的。
我需要在ADD部分找到前10个字符(简单)12345 abcde和变量AA 1ab 12和AA 2abc 123(如果它们存在):

12345abcdeADDAA1ab12
12345abcdeADDxyzAA1ab12
12345abcdeADDxyzAA1ab12xyz
12345abcdeADDAA2abc123
12345abcdeADDAA1ab12xyAA2abc123
12345abcdeADDAA1ab12xAA2abc123y
12345abcdeADDxAA1ab12xAA2abc123y
12345abcdeADDxAA2abc123xAA1ab12y

下面是一个简化的示例和解决方案,但我担心它需要许多步骤来应用并导致性能问题:

我尝试在(^(.{10})(?:(?:ADD).*?(AA1.{4})?.*?(AA2.{6})?.*?)?$)和其他一些选项之间添加一个Laziness字符串,但没有成功。

也许我错过了一个正则表达式功能
谢谢你的帮助!

6qftjkof

6qftjkof1#

  • ".真实的应用问题:从天气NOAA ISD原始格式数据集获取8个可选变量:..."*

您可以通过Assert结束值为,

  • 第116页 “备注数据部分” 的文本 “REM”
  • 行的末尾,$
  • 或者,另一个 * 数据类型 *,[A-Z]{2}\d
(AA1|AJ1|GF1|GH1|GM1|OC1|OA1|OD1)(.+?)(?=REM|$|[A-Z]{2}\d)

下面是一个使用 Python 的例子。

p = r'(AA1|AJ1|GF1|GH1|GM1|OC1|OA1|OD1)(.+?)(?=REM|$|[A-Z]{2}\d)'
l = [{y.group(1): y.group(2)} for x in s for y in re.finditer(p, x)]
[print(x) for x in l]

输出

{'GF1': '07991071091004501999031'}
{'OA1': '99901431'}
{'OA1': '99901431'}
{'GF1': '07991021061002501031999'}
{'AJ1': '00039199999999'}
{'GF1': '08991061071004501999999'}
{'OA1': '99901381'}
{'AA1': '06999999'}
{'GF1': '99999081999003601999999'}

相关问题