过去我的理解是机场的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数?
谢谢!
答案 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字符集。