如何从制表符分隔的文本行中提取两个中心列?

时间:2013-09-04 04:53:51

标签: regex string-split tab-delimited tsv capture-group

我需要两个正则表达式正则表达式。一个将找到第二个数字块,一个将找到第三个数字块。我的数据是这样的:

8782910291827182    04  1988    081

一个代码可以找到04,另一个代码可以找到1988。我已经有了找到前16个数字和最后3个数字的表达式,但是我找不到第2和第3部分的那2个数字。

2 个答案:

答案 0 :(得分:1)

使用字段拆分

根据您的语料库,似乎应该能够依赖由制表符或其他空格分隔的四个字段的存在。拆分字段比构建和测试正则表达式要容易得多,所以我建议跳过正则表达式,除非示例中没有包含边缘情况。

考虑以下Ruby示例:

# Split the string into fields.
string = '8782910291827182    04  1988    081'
fields = string.split /\s+/
#=> ["8782910291827182", "04", "1988", "081"]

# Access members of the field array.
fields.first
#=> "8782910291827182"

fields[1]
#=> "04"

fields[2]
#=> "1988"

# Unpack array elements into variables.
field1, field2, field3, field4 = fields
p field2, field3
#=> ["04", "1988"]

正则表达式将迫使您花费更多时间进行模式匹配,尤其是当您的语料库变得更复杂时;字符串拆分通常更简单,并且可以使您更专注于结果集。在大多数情况下,最终结果将在功能上相似,因此哪一个对您更有用将取决于您真正想要做的事情。有其他选择总是好的!

答案 1 :(得分:0)

找到2个数字:

\b\d{2}\b

找到4个数字:

\b\d{4}\b