我向你保证,我已经在网站上搜索了大约两个小时。我发现应该已经工作,但他们没有。Perl,删除前三个字符后的所有内容
我有一行由不同数量的空格分隔的数字组成。我想删除第三个数字后的所有内容。
我应该说,我一直在写的一切都假设\S\s\S\s\S
会匹配前三个数字。 1和2,以及2和3
之间的空间我期待下面的工作:
s/^.*?[\S\s\S\s\S].{5}//s;
但它没有什么我想要的正好相反。
我想2 3 0 4 5 6 7 1 0 1 2
成为2 3 0
我真的宁愿保持它替代。我已经试过一个人提到的背后,我没有运气。在尝试这些命令之前,我应该将前3个数字保存为字符串吗?
编辑:
我应该澄清的是,这些数字可能是在形式或1.57 1.00E01为好。当我试图将这些工作纳入基准工作时,我有了整数。
'\ S \ S \ S \ S \ S'确实会匹配'2 3 0';然而,方括号表示[字符类](http://www.regular-expressions.info/charclass.html),所以'[\ S \ s \ S \ s \ S]'只会匹配一个字符,提供该字符是空格('\ S')或非空格('\ s')。所以'/^.*?[\ S \ s \ S \ s \ S]。{5} // s;'等价于s /^.* ?. {6} // s;', (因为'。*?'将尽可能少地匹配,在这种情况下它们总是空字符串)等同于s/^ {6} // s;' - 删除前六个字符,提供的字符串*至少包含六个字符。 – ruakh 2012-08-08 17:55:45
@ruakh感谢您链接到角色类页面。我原本刚刚在括号内有一个Character和一个空格来测试它是否工作,然后在不重新测试的情况下对其进行扩展。 – 2012-08-08 18:20:37
为了让事情更清楚:您的输入是否由唯一的数字组成,总是用空格分隔? – pavel 2012-08-08 18:49:46