13

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

例如:

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

我可以用正则表达式将这些行分成三个字段,用空格分隔,但在第一个字段中允许单个空格吗?

4

5 回答 5

9

嗨,下面的正则表达式应该可以工作

(\w*\s\w*)\s+\w{2}\d\s+\d*
于 2012-11-22T15:53:03.503 回答
4

这会起作用:

图案:

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

替换:

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

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

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

于 2012-11-22T16:04:39.523 回答
3

您可以在两个或多个空格处拆分:

[ ]{2,}

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

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

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

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

于 2012-11-22T15:53:54.800 回答
1

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

/  +/

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

所以简单地说,使用正则表达式来匹配空格,然后使用一个或多个空格来分割你的字符串。

于 2012-11-22T16:10:59.153 回答
0

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

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

Name           Other Data
Johnny AppleseeXX1
TutankamonfirstXX2

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

于 2012-11-22T15:55:04.853 回答