正则表达式在Powershell

时间:2016-05-31 17:09:15

标签: arrays regex powershell

我有一个字符串数组,我想消除该数组中每个字符串的一部分,但我在使用Regex时遇到了麻烦。

每个字符串的格式如下:

username  comment  IPaddress
username2 comment  IPaddress 

不幸的是,在某些方面,我在用户名和评论之间有多个空格。此外,至少有一个空格,但有时评论和IP地址之间的空格更多。我的想法是从第一个空间的位置开始,并删除IP地址的所有内容,格式为xxx.xxx.xxx.xxx。另外,有一些技巧是我有一个默认路由(0.0.0.0)所以我还需要检查IP地址的第一个八位字节在点之前有一个最多三位数。 输出应该是,每行

username IPaddress

有一个空格。

当我做$array.GetType()这就是我得到的

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                         
-------- -------- ----                                     --------                                                                                                                                                                         
True     True     String[]                                 System.Array

我想-replace可以帮助我,但我的所有正则表达式结果都会失败。

1 个答案:

答案 0 :(得分:1)

你的正则表达式看起来像这样:

^(\w+).*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

Regular expression visualization

Debuggex Demo

现在您可以捕获用户名和IP并用以下内容替换整个字符串:

$test= @(
    'jdoe (comment missing) 0.0.0.0'
    'jdoe2 This is jdoe2 192.168.0.1'
)


$test -replace '^(\w+).*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', '$1 $2'

<强>输出:

jdoe 0.0.0.0
jdoe2 192.168.0.1