Powershell正则表达式在垂直条之间匹配(|)

时间:2017-09-23 22:31:40

标签: regex powershell

下面只是我匹配的两行字符串

     6  |UDP     |ENABLED   |        |15006  |010.247.060.120  | UDP/IP Communications  | UDP/IP Communications GH1870

10  |Gway    |ONLINE    |        |41794  |127.000.000.001  | DM-MD64x64  | DM-MD64x64

下面是我到目前为止的正则表达式,但它只匹配底线

(?i)(?<cipid>([\w\.]+))\s*\|\s*(?<ty>\w+)?\s*\|\s*(?<stat>[\w ]+)\s*\|\s*(?<devid>\w+)?\s*\|\s*(?<prt>\d+)\s*\|\s*(?<ip>([\d\.]+))\s*\|\s*(?<mdl>[\w-]+)\s*\|\s*(?<desc>.+)

我想知道我是否可以使用正则表达式来匹配每条垂直线之间的每个字符,而不必明确说出垂直线之间的内容

全部谢谢

1 个答案:

答案 0 :(得分:2)

这通常有效。 (?:^|(?<=\|))[^|]*?(?=\||$)

https://regex101.com/r/KMNc47/1

格式化

 (?: ^ | (?<= \| ) )           # BOS or Pipe behind
 [^|]*?                        # Optional non-pipe chars
 (?= \| | $ )                  # Pipe ahead or EOS

这里有空白修剪并包含一个捕获组。

(?:^|(?<=\|))\s*([^|]*?)\s*(?=\||$)

https://regex101.com/r/KMNc47/2

格式化

 (?: ^ | (?<= \| ) )           # BOS or Pipe behind
 \s*
 ( [^|]*? )                    # (1), Optional non-pipe chars
 \s*
 (?= \| | $ )                  # Pipe ahead or EOS

这是一个Capture Collection配置。

(?:(?:^|\|)\s*([^|]*?)\s*(?=\||$))+

https://regex101.com/r/KMNc47/3

格式化

(?:
   (?: ^ | \| )                 # BOS or Pipe
   \s*
   ( [^|]*? )                   # (1), Optional non-pipe chars
   \s*
   (?= \| | $ )                 # Pipe ahead or EOS
)+