匹配给出正则表达式的单词

时间:2017-08-18 09:57:54

标签: regex scala

我需要获取所有包含两个或更多空格“\ s {2,}”的文字。

给出以下文字:

IP Address  Name           Location          Type
10.1.10.5   USLAXBOWC01RB  Santa Monica, CA  local


我需要提取:

第1行: "IP Address", "Name", "Location", "Type"
第2行: "10.1.10.5", "USLAXBOWC01RB", "Santa Monica, CA", "local"

修改

符合提取条件的文字:

IP Address”& “Name”相隔两个或多个空格,因此它们有资格被提取。同样,“Santa Monica, CA”& “local”。

1 个答案:

答案 0 :(得分:2)

您尝试根据“\s{2,}”模式拆分文字。

因此,在Python中,正则表达式lib re为您提供了所有需要的工具:

import re
line   = "IP Address  Name           Location          Type"

result = re.split('\s{2,}',line)

给出了:

['IP Address', 'Name', 'Location', 'Type']

修改

我想我更了解你的问题:你更关心在\s{2,}之间隔离序列,而不是分裂它。但是,在您的示例中,上述解决方案似乎是最合适的。

你问了一个正则表达式,这是:

reg1 = "[^\s](?!\s{2,})(?:.(?!\s{2,}))*[^\s]"
  1. 首先选择一个字符,该字符不是[^\s](?!\s{2,})后面没有两个或更多空格的空格。为此,我使用了负向前瞻断言(?!...);
  2. 然后,它隔离了以这种方式组成的群组(?:...):任何未跟.的字符\s{2,};
  3. 重复*;
  4. 如果我们现在停止,则不会选择最终字符。所以我们应该再添加一个[^\s]
  5. A re.findall(reg1,line),你应该完成。一个缺点可能是:它检测到至少两个字符长的序列

    在这种情况下,另一个更简单的正则表达式最终可以完成这项工作:reg2 = "\s{2,}([^\s])\s{2,}"。它选择由两个或更多空格包围的单个非空格字符。使用括号(...),强制只返回字符。

    顺便说一句,我强烈建议您查看文档:{​​{3}}

    希望你找到你想要的东西: - )