如何跳过表格首列?正则匹配文本表格非首列数字的方法
如何匹配表格中除首列外的所有数字?
你的问题我懂了——之前用(?<!^)[\d.E-]+没成功,是因为这个正则只排除了字符串最开头的那个首列数字(13.5),但其他行的首列数字(比如14、14.5)前面是空格,不是字符串开头,所以会被这个正则错误地匹配到,达不到你要排除所有首列数字的目的。
我给你两种解决方案,推荐第一种,简单又不容易出错:
方案1:用代码分割过滤(推荐)
如果你用Python处理这段文本,完全不需要复杂的正则,直接按空格分割成数字列表,然后排除每行首列对应的索引就行——你的表格每行有5个数字,所以首列数字的索引是0、5、10、15、20(从0开始计数):
text = "13.5 0.12557 0.04243 -0.0073 0.00377 14 0.12573 0.05 -0.00697 0.00437 14.5 0.12623 0.05823 -0.00703 0.005 15 0.12853 0.0686 -0.00627 0.00493 15.5 0.1299 0.08073 -0.00533 0.0063" # 按空格分割成数字列表 num_list = text.split() # 排除每行首列的数字(索引为0、5、10、15、20) target_nums = [num for idx, num in enumerate(num_list) if idx not in {0, 5, 10, 15, 20}] print(target_nums)
运行后就能得到所有非首列的数字,结果完全符合你的需求。
方案2:正则解法
如果一定要用正则,分两种情况处理:
情况1:首列数字是固定的特定值
你的首列数字是13.5、14、14.5、15、15.5,这些数字要么是整数,要么是整数+.5的格式,而其他数字都是0开头的小数或负小数。可以用这个正则:
(?<!^|\s)(?:-?0\.\d+|\d+\.\d+)
这个正则的逻辑是:
(?<!^|\s):确保匹配的数字前面不是字符串开头或空格,直接排除所有作为行首的数字(?:-?0\.\d+|\d+\.\d+):只匹配符合非首列格式的数字(负/正的0开头小数,或者整数部分大于0的小数)
情况2:通用情况(不管首列数字是什么)
如果你的表格行数固定(这里是5行),可以用负向回顾断言排除特定位置的数字:
(?<!^(?:\S+\s){0}|^(?:\S+\s){5}|^(?:\S+\s){10}|^(?:\S+\s){15}|^(?:\S+\s){20})\S+
这个正则会排除第1、6、11、16、21位的数字(也就是每行的首列),但缺点是如果行数变化,需要手动调整里面的数字参数,灵活性不如方案1。
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

