写正则表达式以匹配模式之间的所有4位数字

时间:2015-05-29 21:45:48

标签: python regex

我正在尝试编写一个正则表达式来查找字符串中的模式。它会有一个字“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工作,虽然我不太关心这门语言。我对正则表达世界很新。所以我只是尝试一些随机的东西,到目前为止还没有任何结论。

2 个答案:

答案 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 '/LAT_LON/,/\n[^0-9]/{printf gensub(/[^0-9 ]/, "", "g", $0) " "}' /path/to/intput/file

使用可能的管道来清理输出| tr -s ' '

此代码只搜索包含LAT_LON的行,然后它将解析每一行,直到找到非数字。在这些行中,我们使用gensub过滤掉非空格或数字。

注意,正则表达式相当简单,因为我们已经过滤掉了所有不相关的部分。一个简单的非数字删除工作在这里工作。如果您想要使用,请参阅,在我看来,这是最好的学习方式。特别是,它支持增强的正则表达式语言!