表结构字符串的正则表达式模式

时间:2018-01-03 15:57:47

标签: regex

see this

我很难将模式与空列匹配。我的正则表达式模式看起来像

^(.*?\$).*?(\w\:\\.*?)\s(.*?)$

此模式匹配行中的非空列,但我想匹配行中的空列。

1 个答案:

答案 0 :(得分:1)

如果没有确切的输入(而不仅仅是图片),很难复制你的问题,所以我希望下面有正确的输入。在任何情况下,您遇到的问题是您还没有将中间列设为可选。我已重新创建您的正则表达式以更好地执行,并允许将\s更改为\h(水平空白字符)。你还没有指定一个正则表达式引擎,所以我假设任何工作。如果您的引擎不支持\h,则可以改为使用[ \t]

代码

See regex in use here

^([^$]+\$)\h+([a-z]:\\\S*)?\h+(.*)$

结果

输入

IPC$                                            Remote IPC
ADMIN$          C:\Windows                      Remote Admin
D$              D:\                             Default share
C$              C:\                             Default share

输出

  • 第1场比赛:IPC$ Remote IPC
    • 第1组:IPC$
    • 第3组:Remote IPC
  • 第2场比赛:ADMIN$ C:\Windows Remote Admin
    • 第1组:ADMIN$
    • 第2组:C:\Windows
    • 第2组:Remote Admin
  • 第2场比赛:D$ D:\ Default share
    • 第1组:D$
    • 第2组:D:\
    • 第2组:Default share
  • 第2场比赛:C$ C:\ Default share
    • 第1组:C$
    • 第2组:C:\
    • 第2组:Default share

说明

  • ^在行首处断言位置
  • ([^$]+\$)将以下内容捕获到捕获组1中
    • [^$]+匹配$除{/ 1}}之外的任何字符
    • \$按字面意思匹配$
  • \h+匹配一个或多个水平空白字符
  • ([a-z]:\\\S*)? (可选)将以下内容捕获到捕获组2中
    • [a-z]匹配此范围内的任何字符(任何小写字母 - i标记,它也匹配大写变体)
    • :\\按字面意思匹配:\
    • \S*匹配任意数量的非空白字符
  • \h+匹配一个或多个水平空白字符
  • (.*)将任意字符捕获到捕获组3
  • $断言行尾的位置