帮助优化RegEx(“\ b \ d {6}([] {1,15})\ d {7} \ b”)

时间:2009-05-02 03:08:46

标签: regex

过去我的理解是机场的Lat / Lon必须在同一条线路上(L 300216 0915302'2425 29865997),其中300216/0915302是Lat / Lon。我发现用户也可以将Lat / Lon放在不同的行上。

I  ARA                                    '* ACADIANA  AIRPORT         29865996    
                L    300216                               '2425     29865997    
                     0915302                              '2425     29865998    
                S    MSY                                            29865999    
                M    05E                                            29866000    
                P    100  0300                                      29866001    
                P    239  3405                                      29866002    
                P    999  7001  O                                   29866003    

如何修改我的RegEx以捕获任何6位数后跟7位数字,前面是L且没有alpha数?

谢谢!

3 个答案:

答案 0 :(得分:1)

至于匹配

  

任何6位数,后跟7位数字,前面是L,

之间没有alpha

你可以使用模式:

\bL\s*\d{6}\s*\d{7}\b

这将匹配

  

L(任意数量的空格)dddddd(任意数量的空格)ddddddd

被边界包围。当涉及跨多行匹配时,这通常是您可以使用正在使用的正则表达式引擎设置的标志。 \ s匹配换行就好了,但只有你设置了多行标志。

答案 1 :(得分:1)

我在右栏中看到八位数,而不是七位数。我看错了吗?所以我认为这个问题并不完全是以前的答案似乎在回答的问题。七位数实际上在下一行。

此外,这看起来像固定长度列输出给我,所以如果你知道列数,你可以通过使用精确数字而不是*修饰符来获得显着的速度。

因此,如果“x”是L和6位数之间的列数,并且“L”位于第一列,

$ text = ~m / L \ s {x}(\ d {6})。* [\ r \ n] \ s \ s {x}(\ d {7})/

看起来好像应该匹配。不确定文件中还有什么可以处理,但这是一个可以开始的地方。

$ 1 =第一个数字块(6),$ 2 =下一行7位数。 (使用perl语法,根据需要调整其他实现)

答案 2 :(得分:0)

尝试以下方法。根据你的总结,我得到它匹配任何6位数的组,然后是任何长度的空格,包括新的行,然后是L和7位数

\d{6}[\s\n]*L\s*\d{7}

我使用了.Net形式的正则表达式。如果你使用不同的引擎,你可以发布哪一个?这也只适用于ASCII字符集。