正则表达式从字符串中提取值

时间:2014-03-20 06:41:58

标签: regex pcre

我有一个这种格式的字符串:

 Index  val1    val2  val3 val4
" 09     46.6   33.4  11   33.8  "

我必须将值val1提取到val4。这可以通过这个正则表达式完成:

(?<index>\d{2})\s+(?<val1>(\d+\.?\d+)|\w+)\s+(?<val2>(\d+\.?\d+)|\w+)\s+(?<val3>(\d+\.?\d+)|\w+)\s+(?<val4>(\d+\.?\d+)|\w+)

现在我遇到的问题是字符串中的任何一个值也可以是空白的。在那种情况下,如果失败。那么我该如何从中提取值:

 Index  val1    val2  val3 val4
" 09     46.6         11   33.8  "

请注意,除索引值外,任何或所有值都可以为空。标题行在文件中提供。 任何帮助表示赞赏。

由于

3 个答案:

答案 0 :(得分:0)

假设text.txt包含您的数据

:~$ awk '{print $0}' text.txt | tr -d \" > out
:~$ awk '{ print substr($0, index($0,$2))}' out

这应该给你想要的输出,我是awk的新手所以不知道如何在一行中做到这一点

在第一行中,我删除",以便我可以直接比较没有"

的值

答案 1 :(得分:0)

我想到的是解决方案(它应该适用于我的空白区域):

(\b\d+[.]?\d\b)|(\s{6})

然而我对此非常满意,因为如果有空格,你需要知道预定义的距离

http://regex101.com/r/jS5aL0

答案 2 :(得分:-1)

为什么在使用简单的字符串函数解决问题时,可以使用正则表达式:提取子字符串并修剪所有空格 - 结果应该是十进制数字或空字符串。

Python中的示例

index = line[0:3].strip()
val1 = line[3:12].strip()
val2 = line[12:19].strip()
val3 = line[19:23].strip()
val4 = line[23:30].strip()