我正在尝试匹配由多个空格分隔的文件。我遇到的问题是第一个字段可以包含一个空格。如何将其与正则表达式匹配?
例如:
Name Other Data Other Data 2
Bob Smith XX1 0101010101
John Doe XX2 0101010101
Bob Doe XX3 0101010101
John Smith XX4 0101010101
我可以使用正则表达式将这些行拆分为三个字段,按空格分割但允许第一个字段中的单个空格吗?
答案 0 :(得分:7)
以下正则表达式应该可以正常工作
(\w*\s\w*)\s+\w{2}\d\s+\d*
答案 1 :(得分:3)
这样可行:
模式:
(.*?)[ ]{2,}(.*?)[ ]{2,}(.*)
的更换:
+$1+ -$2- *$3*
$1
包含第一列,第二列为$2
,第三列为$3
。
答案 2 :(得分:2)
你可以分成两个或更多的空格:
[ ]{2,}
但是你可能会更好,确定这个正则表达式的捕获长度:
(Name[ ]+)(Other Data[ ]+)
然后使用一个简单的子串方法将线条切成相同长度的部分。
所以在你的情况下,第一个捕获将是15个字符长,第二个14和列将有13个(但最后一个并不重要,这就是为什么它实际上没有捕获)。然后你取第一个15,接下来的14和每行的剩余字符,每个trim
(删除尾随空格)。
答案 3 :(得分:0)
通常,对于这种类型的文件,最好的方法是根据所需信息的位置获取子字符串,然后对其进行修剪。我看到你的文件在第二个字段之前包含16个字符,你可以从头开始得到一个长度为16的子字符串,它将包含你想要的文本。你应该修剪它以获得没有空格的所需文本。
如果您发布的间距模式是一致的(如果它在这种不同的文件中不会发生变化),您还会遇到另一个问题:更长的名称会发生什么变化?
Name Other Data
Johnny AppleseeXX1
TutankamonfirstXX2
如果你真的想使用正则表达式,请务必避免这些极端情况。
答案 4 :(得分:0)
我认为最简单的方法是使用匹配两个或更多空格的正则表达式。
/ +/
分解为...分隔符(/
)后跟一个空格(),后跟另一个空格一次或多次(
+),后跟结束分隔符(我的示例中为
/
,但语言是特定的。)
简单地说,使用正则表达式匹配空格,然后使用一个或多个空格作为分割字符串的方法。