Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 删除两个特定单词之间的空白_Regex_Uppercase_Lowercase_Removing Whitespace - Fatal编程技术网

Regex 删除两个特定单词之间的空白

Regex 删除两个特定单词之间的空白,regex,uppercase,lowercase,removing-whitespace,Regex,Uppercase,Lowercase,Removing Whitespace,我正在处理一些被转录成txt文件的人口普查数据。但是,字段之间用空格分隔,而不是逗号或制表符。以下是一个典型行中的几个字段,有助于说明我的问题: 18A 1 239 18A Coffey Street 165 125 331 McLocklan Donald New York 有些字段由多个空格分隔,但有些字段仅由一个空格分隔。但是,有些字段中有多个单词(例如:newyork),也用一个空格分隔 我想我知道如何区分小写字母和大写字母之间的单个空格,以及两个大

我正在处理一些被转录成txt文件的人口普查数据。但是,字段之间用空格分隔,而不是逗号或制表符。以下是一个典型行中的几个字段,有助于说明我的问题:

18A 1   239 18A Coffey Street     165    125 331 McLocklan      Donald     New York
有些字段由多个空格分隔,但有些字段仅由一个空格分隔。但是,有些字段中有多个单词(例如:newyork),也用一个空格分隔

我想我知道如何区分小写字母和大写字母之间的单个空格,以及两个大写字母之间的单个空格。我对regex还是新手,不知道怎么做。有谁能告诉我,我如何表达我的愿望,在以小写字母结尾的单词/字符组和以带下划线的大写字母开头的单词/字符组之间替换一个空格

我想这可以让我把Coffey_街和纽约这样的东西分组,而不必连接18A_Coffey这样的字段。欢迎提出任何建议或建议。谢谢


-康纳

我会要求发送文件的人用更好的分隔符再次发送。在小写字母和大写字母之间添加下划线并不适用于所有情况

也就是说,您可以使用这个命令来完成它

sed -r 's/([a-z]) ([A-Z])/\1_\2/g' file
解释

([a-z]) - match a lowercase character and group it
([A-Z]) - match an uppercase character and group it
the space in between - matches a space character
sed
发现与该模式匹配时,它会这样替换它

\1 - puts back the lowercase character
_ - puts an _ where the space was
\2 - puts back the uppercase character

嗯。。。字段实际上是固定宽度而不是分隔的吗?从这个CSV文件的间距来看,您使用的是固定宽度的转储,就像@AndrewMorton所问的那样。您可以通过显示更多的输出行(3-4行就可以了)很容易看出这一点,因为我们可以快速直观地评估情况是否如此。在这种情况下,正则表达式可以变得简单得多,因为较少的边缘案例会导致格式问题。您好,谢谢您的回复。我认为它们是固定宽度的。这些是一个人口普查转录网站上的文本文件:我在text Wrangler中工作,按照Dan Nguyen的《王八蛋的正则表达式之书》中的指示()。然而,出于某种原因,一些应该以某种方式工作的表达式,只是有点不适合。我也在Regexr.com和Rubular.com上玩,结果类似。+1,但我们知道他在用sed吗?。。也许他不知道他能在很多正则表达式环境中做到这一点(@OP-look-at-substitution)谢谢!我来看看演示。老实说,我甚至不知道我是否在使用sed。正如我上面提到的,我只是在自学,摸索自己的方法,看看什么是有效的。我总是发现这是学习东西的最好方式——但我真的很欣赏这样的论坛,因为当我遇到一些我无法理解的事情时!谢谢你的帮助!