我正在尝试编写一个正则表达式来查找字符串中的模式。它会有一个字“LAT_LON'然后是一些非单词字符,然后是许多4位数字,然后是一些字母或字符串结尾。
Eg1.
SOME EXAMPLE STRING 12334...
LAT_LON .... 1234 5678 9012 1234
1234 1234
Eg2.
SOME EXAMPLE STRING 1234...
LAT_LON ... 1234 5678 9012 1234
1234 1234 SOMETHING_ELSE
在这两个例子中,我需要在模式' LAT_LON'之后的6个4位数字。在任何其他字母之前。
编辑:我在python工作,虽然我不太关心这门语言。我对正则表达世界很新。所以我只是尝试一些随机的东西,到目前为止还没有任何结论。答案 0 :(得分:4)
一种方法是捕获数字,然后在空格上分割
LAT_LON[^\da-zA-Z]*(\d{4}(?:\s+\d{4})*)
然后在空白处拆分捕获组1。
LAT_LON [^\da-zA-Z]*
( # (1 start)
\d{4}
(?:
\s+
\d{4}
)*
) # (1 end)
这是一个更详细的格式化版本 (由RegexFormat 6构建的正则表达式)
LAT_LON # Exact 'LAT_LON'
[^\da-zA-Z]* # Optinal chars, 0 to many times
# not digit nor letter (case insensitive)
( # (1 start), Capture all 4 digit numbers
\d{4} # Single 4 digit number
(?: # Cluster group
\s+ # Whitespace(s)
\d{4} # Single 4 digit number
)* # End Cluster, do 0 to many times
) # (1 end)
答案 1 :(得分:3)
让我以另一种方式尝试,只是为了在答案中有一些变化。我将使用awk来完成这项工作。
awk '/LAT_LON/,/\n[^0-9]/{printf gensub(/[^0-9 ]/, "", "g", $0) " "}' /path/to/intput/file
使用可能的管道来清理输出| tr -s ' '
。
此代码只搜索包含LAT_LON
的行,然后它将解析每一行,直到找到非数字。在这些行中,我们使用gensub
过滤掉非空格或数字。
注意,正则表达式相当简单,因为我们已经过滤掉了所有不相关的部分。一个简单的非数字删除工作在这里工作。如果您想要使用grep,请参阅regex,在我看来,这是最好的学习方式。特别是egrep,它支持增强的正则表达式语言!