单一空间的正则表达式

时间:2012-11-22 15:48:16

标签: regex

我正在尝试匹配由多个空格分隔的文件。我遇到的问题是第一个字段可以包含一个空格。如何将其与正则表达式匹配?

例如:

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

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

5 个答案:

答案 0 :(得分:7)

以下正则表达式应该可以正常工作

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

答案 1 :(得分:3)

这样可行:

模式:

(.*?)[ ]{2,}(.*?)[ ]{2,}(.*)

的更换:

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

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

实施例: http://regexr.com?32tbt

答案 2 :(得分:2)

你可以分成两个或更多的空格:

[ ]{2,}

但是你可能会更好,确定这个正则表达式的捕获长度:

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

然后使用一个简单的子串方法将线条切成相同长度的部分。

所以在你的情况下,第一个捕获将是15个字符长,第二个14和列将有13个(但最后一个并不重要,这就是为什么它实际上没有捕获)。然后你取第一个15,接下来的14和每行的剩余字符,每个trim(删除尾随空格)。

答案 3 :(得分:0)

通常,对于这种类型的文件,最好的方法是根据所需信息的位置获取子字符串,然后对其进行修剪。我看到你的文件在第二个字段之前包含16个字符,你可以从头开始得到一个长度为16的子字符串,它将包含你想要的文本。你应该修剪它以获得没有空格的所需文本。

如果您发布的间距模式是一致的(如果它在这种不同的文件中不会发生变化),您还会遇到另一个问题:更长的名称会发生​​什么变化?

Name           Other Data
Johnny AppleseeXX1
TutankamonfirstXX2

如果你真的想使用正则表达式,请务必避免这些极端情况。

答案 4 :(得分:0)

我认为最简单的方法是使用匹配两个或更多空格的正则表达式。

/  +/

分解为...分隔符(/)后跟一个空格(),后跟另一个空格一次或多次( +),后跟结束分隔符(我的示例中为/,但语言是特定的。)

简单地说,使用正则表达式匹配空格,然后使用一个或多个空格作为分割字符串的方法。