单个空格的正则表达式

16

我试图匹配一个由多个空格分隔的文件。我的问题是第一个字段可能只包含一个空格。如何使用正则表达式进行匹配?

例如:

Name           Other Data    Other Data 2 
Bob Smith      XX1           0101010101
John Doe       XX2           0101010101
Bob Doe        XX3           0101010101
John Smith     XX4           0101010101

我能用正则表达式将这些行拆分为三个字段吗?以空格分割,但允许第一个字段中的单个空格?


1
你使用的是什么编程语言? - garyh
4
你不一定需要使用正则表达式。因为它们由空格分隔,你可以每次读取15个字符来获取每列数据,然后去掉空格以得到数据。 - Sean Powell
5个回答

9

你好,以下正则表达式应该可以工作:

(\w*\s\w*)\s+\w{2}\d\s+\d*

2
你的回答帮助我找到了正确的正则表达式,谢谢。我最终使用的正则表达式是(.*?)[ ]{2,}(.*?)[ ]{2,}(.*?)[ ]{2,}(.*?)[ ]{2,}(.*?)[ ]{2,}(.*?)[ ]{2,}(.*?)$ - Echilon

5
这将起作用:
模式:
(.*?)[ ]{2,}(.*?)[ ]{2,}(.*)

替换:

+$1+ -$2- *$3*

$1 包含第一列,$2 包含第二列,$3 包含第三列。

例如: http://regexr.com?32tbt


3

您可以使用两个或更多空格进行分割:

[ ]{2,}

但是您最好确定此正则表达式的捕获长度:

(Name[ ]+)(Other Data[ ]+)

然后使用一个简单的子字符串方法,将你的行切成相同长度的部分。

所以在你的情况下,第一个截取的字符串将有15个字符长度,第二个截取的字符串将有14个字符长度,而列将有13个字符长度(但最后一个其实并不重要,所以它实际上没有被捕获)。然后你取每行的前15个字符、接下来的14个字符和剩余的字符,并对它们进行trim操作(去掉尾部空白)。


2
我认为最简单的方法是使用一个正则表达式,匹配两个或两个以上的空格。
/  +/

这段意思是...

将文本通过正则表达式匹配,按照一定规则分割字符串。具体来说,它使用分隔符 (/),接着使用空格 (),再加上一个或多个空格(+), 最后以结束分隔符 (/) 结尾。但需要注意的是,结束分隔符的具体符号取决于所使用的编程语言。

简而言之,使用正则表达式匹配空格,再匹配一个或多个空格来分割您的字符串。


1
/ 不是正则表达式的一部分,只有在某些语言中用作分隔符。此外,为了可读性,我强烈建议将正则表达式中的每个空格写成 [ ]] 格式。 - Martin Ender

0
通常,对于这种类型的文件,最好的方法是根据所需信息的位置获取子字符串,然后修剪它。我看到你的文件在第二个字段之前包含16个字符,你可以从开头获取长度为16的子字符串,其中将包含你想要的文本。你应该修剪它,以便只获取你需要的文本而没有空格。
如果你发布的间距模式是一致的(如果它在这种不同类型的文件中不会改变),那么你还有另一个问题:更长的名称会发生什么?
Name           Other Data
Johnny AppleseeXX1
TutankamonfirstXX2

如果你真的想使用正则表达式,请确保避免那些边缘情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接