【发布时间】:2014-07-30 11:29:38
【问题描述】:
我正在处理一些已转录成 txt 文件的人口普查数据。但是,这些字段由空格而不是逗号或制表符分隔。以下是典型行中的一些字段,这将有助于说明我的问题:
18A 1 239 18A Coffey Street 165 125 331 McLocklan Donald New York
有些字段由多个空格分隔,但有些字段仅由一个空格分隔。然而,一些字段中包含多个单词(例如:New York),也由一个空格分隔。
我想我知道如何通过区分小写字母和大写字母之间的单个空格与两个大写字母之间的单个空格来做到这一点。我仍然是正则表达式的新手,但不知道如何做到这一点。谁能告诉我如何表达希望替换以小写字母结尾的单词/字符组和以带下划线的大写字母开头的单词/字符组之间的单个空格?
我认为这可以让我对 Coffey_Street 和 New_York 等内容进行分组,而无需连接 18A_Coffey 等字段。任何建议或意见都将受到欢迎。谢谢!
-康纳
【问题讨论】:
-
嗯...这些字段实际上是固定宽度而不是分隔的吗?
-
从这个 CSV 文件的间距来看,您正在使用固定宽度的转储,就像@AndrewMorton 所问的那样。您可以通过显示更多的输出行(3-4 行应该没问题)轻松判断这一点,因为我们可以快速直观地评估是否是这种情况。在这种情况下,正则表达式可以变得更简单,减少导致格式问题的边缘情况。
-
您好,感谢您的回复。我认为它们是固定宽度的。这些是来自人口普查转录网站的文本文件:us-census.org/pub/usgenweb/census/ny/kings/1910/… 我在 Text Wrangler 工作,并遵照 Dan Nguyen 的 The Bastard's Book of Regular Expressions (regex.bastardsbook.com) 的说明。但是,出于某种原因,一些应该以某种方式工作的表达式,只是有点不是。我也在 Regexr.com 和 Rubular.com 上玩,结果相似。
标签: regex uppercase lowercase removing-whitespace