我有一个这种格式的字符串:
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 "
请注意,除索引值外,任何或所有值都可以为空。标题行在文件中提供。 任何帮助表示赞赏。
由于
答案 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})
然而我对此非常满意,因为如果有空格,你需要知道预定义的距离
答案 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()