我在一个文件中有这样的行:
l_12_interval j_10_int
Length:100 Min. :-2120803808
Class :character 1st Qu.: -992076064
Mode :character Median : 263935522
Mean : -33801580
3rd Qu.: 896644601
Max. : 1890084945
NA's :53
我想解析出我称之为最后一个“主要列”的内容:
j_10_int
Min. :-2120803808
1st Qu.: -992076064
Median : 263935522
Mean : -33801580
3rd Qu.: 896644601
Max. : 1890084945
NA's :53
列将对齐,但我不能确定最后一个主要列将从何处开始。标题不是问题,我正在尝试为Python的re.sub()
函数编写一个正则表达式,以除去标签前面的所有内容。我想我可以把标签和冒号作为子表达式包含在正则表达式中,然后用子表达式替换匹配的表达式。说起来容易做起来难!这是我得到的最接近的结果:
>>> line
' Length:100 Min. :-2120803808'
>>> re.sub(r"^.*([a-z1-9][a-z1-9.' ]*:)", r"\1", line, re.IGNORECASE)
'n. :-2120803808'
>>>
我想我可以在子表达式开始前立即抛出一个空格,但这不起作用:
>>> re.sub(r"^.*\s([a-z1-9][a-z1-9.' ]*:)", r"\1", line, re.IGNORECASE)
' Length:100 Min. :-2120803808'
>>> re.sub(r"^.* ([a-z1-9][a-z1-9.' ]*:)", r"\1", line, re.IGNORECASE)
' Length:100 Min. :-2120803808'
>>> re.sub(r"^.*( [a-z1-9][a-z1-9.' ]*:)", r"\1", line, re.IGNORECASE)
' Length:100 Min. :-2120803808'
>>> re.sub(r"^.*(\w[a-z1-9][a-z1-9.' ]*:)", r"\1", line, re.IGNORECASE)
'in. :-2120803808'
如你所见,我甚至试着在子表达式中拉空格。。。这是可以接受的。但我还没有完全解决问题。你知道吗
有人有什么建议吗?你知道吗
如果您不必使用正则表达式并且列具有固定宽度,那么下面的示例也适用于您。你知道吗
这将输出:
Ide不编写python正则表达式。你知道吗
因此,如果这是一个一次性的工作,那么我有一个PerlOneLiner给你。你知道吗
在从文件
FILE.txt
到文件NEWFILE.txt
中生成所需输出的我希望这是有用的。你知道吗
诀窍是在
:
之前寻找垃圾,然后是可能的空格和一组单词字符,然后是一些空格。在那之后的一切都是你要找的。你知道吗我还处理了其他情况,如第一行和剥离一些行的前导空格。你知道吗
这一点基于许多关于名称格式和第一列值格式的假设,但它适用于您的示例:
根据您对不同名称和值的格式的确切了解,可能需要做更多的工作。你知道吗
演示: http://regex101.com/r/oP3pT2
相关问题 更多 >
编程相关推荐