【问题标题】:Regex for extract chars from a 2 space separated columns用于从 2 个空格分隔的列中提取字符的正则表达式
【发布时间】:2017-09-15 12:22:30
【问题描述】:

我需要一个正则表达式来解析一行。
数据分隔的空格数为2个或更多,列值可以是一个单词或1个空格分隔的单词。
例如
输入:
01 Active/Active VXSM_T1E1 MAJOR NA NO REDUNDANCY
所以,这个输出应该是:
01
Active/Active
VXSM_T1E1
MAJOR
NA
NO REDUNDANCY

输入:
01 Active/Active VXSM_T1E1 MAJOR NEXT NA NO REDUNDANCY ELEMENT
所以,这个输出应该是:
01
Active/Active
VXSM_T1E1
MAJOR NEXT
NA
NO REDUNDANCY ELEMENT

我从:(\S+\s\s)|(\S+\s)+ 但无法解决我所有的问题

【问题讨论】:

  • 您的编程语言(实际上,如果您正在编码)可能有一个对应于正则表达式的split 函数。与这个正则表达式一起使用它\s{2,}
  • 你在哪里挣扎?你试过什么?我的意思是我可以给你一个正则表达式,但我不确定从长远来看这对你有帮助......不过有一个提示:\s 匹配一个空格字符; @revo 由于您的示例,我输入了\s\s+
  • 到目前为止你已经尝试过什么。请发表您的意见

标签: regex


【解决方案1】:

您的尝试 (\S+\s\s)|(\S+\s)+ 匹配以下两种情况之一:一个或多个字符后跟两个空格,或者一组或多组一个或多个字符后跟一个空格。

如果您查看您的要求,则需要将这两者结合为一个选择。您希望整个组后跟两个空格,并且您希望您的组包含单个空格。

(\S+\s)*\S+(\s\s|$) 匹配零个或多个字符组,后跟一个空格,后跟一个或多个字符,后跟两个空格或结束行。

这包括捕获中的尾随空格。如果这是不需要的,那么最终的捕获组应该是前瞻的。

【讨论】:

  • 我的方法是:(.*?)(\s\s+|$)
  • @futu 我的理念是始终让我的正则表达式尽可能准确地描述我正在寻找的内容。在这种情况下依赖勉强匹配会起作用,但是需求会发生变化,并且勉强匹配很容易中断。在这种情况下,您可以更容易地看到您的代码避免了灾难性的回溯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多